【问题标题】:Remove Escape character from object or string in c#?从 c# 中的对象或字符串中删除转义字符?
【发布时间】:2015-12-24 04:15:51
【问题描述】:

我通过 ajax 将字符串传递给 mvc 中的操作方法, 下面是我的ajax调用

                $("#btnEncrypt").click(function () {
                var pay = JSON.stringify({
                  'payload': {"exp":1442515543,"method":"Login"},
                  'secretKey': "123456"
                });             

                $.ajax({
                type: "POST",                    
                url: '@Url.RouteUrl("GetData")',                   
                data: pay,
                contentType: 'application/json; charset=utf-8',
                success: function (data) {                        
                    alert("Success");
                },
                error: function () {
                    alert('error');
                }
                });
                }); 

下面是我传递了两个参数的动作方法(生成)

                [HttpPost]
                public ActionResult Generate(string payload, string secretKey)
                {
                 Here I am getting payload as "{\"exp\":1442515543,\"method\":\"Login\"}" 
                 instead of "{"exp":1442515543,"method":"Login"}"
                }

那么,我怎样才能得到我通过 ajax 调用传递的原始请求

    "{"exp":1442515543,"method":"Login"}" 

在没有转义字符的操作方法中?提前谢谢你:)

注意: 1) 我曾尝试不使用 stringify 作为请求参数,但它不起作用。 2)这里的参数(exp和method)根据不同的请求而变化,我有大约200个请求,它们都使用不同的参数。

【问题讨论】:

  • 你知道"{\"exp\":1442515543,\"method\":\"Login\"}"在运行时等于"{"exp":1442515543,"method":"Login"}"吗?我没搞错
  • 您确定这些转义符在实际字符串中,而不仅仅是在调试器视图中吗?
  • payload 应该是包含属性expmethod 的模型,而不是string(更好的是,包含secretKey 的属性,这样您只有一个参数)。
  • @M.kazemAkhgary 我检查了 Watch(Name : Value) 中的字符串,结果与转义字符相同。
  • @StephenMuecke 如果有效载荷是模型应该会更好,但是这里我的有效载荷根据请求而变化,所以我无法创建一个模型并定义此属性。

标签: c# json ajax asp.net-mvc stringify


【解决方案1】:

1) 构建 PayloadDto c# 对象

使用 exp 和方法属性,然后在您的方法定义中:

public ActionResult Generate(PayloadDto payload, string secretKey)

2) 构建 PayDto c# 对象

构建一个聚合 PayloadDto 和 secretKey 字符串的 PayDto。

public ActionResult Generate(PayDto pay)

【讨论】:

  • 动态 obj = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"exp\":1442515543,\"method\":\"Login\"}");你的字符串没问题:obj.exp.Value => 1442515543 obj.method.Value => "Login"
  • 使用 JsonConvert.DeserializeObject 我得到的动态值可以正常工作,但是现在如何将该动态值传递给我的主函数 public static string Encode(object payload) ?现在我得到 [ [ [] ], [ [] ]
  • @Hrdk 你不能只使用object 并希望它能确定使用哪种对象类型。创建一个具有适当属性的对象并使用它,如本答案所示。不需要任何动态
  • @Basic 但是在这里我无法创建具有属性的对象,因为我有大约 200 个具有不同属性(参数)的请求。
  • 您需要进一步抽象您的问题 :) 考虑找到一种更通用的方法来解决您的问题或在不同的帖子中公开您的实际问题,以便我们为您提供帮助。
【解决方案2】:

这里只需要在Action处反序列化payload即可移除转义字符

var obj = new JavaScriptSerializer().Deserialize(payload,targetType:null);

问题解决了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2022-01-09
    • 2011-12-10
    相关资源
    最近更新 更多