【问题标题】:asp.net json serializer adding backslash "\" to my propertiesasp.net json 序列化程序在我的属性中添加反斜杠“\”
【发布时间】:2011-09-06 22:47:41
【问题描述】:

我有一个如下所示的对象模型:

public class MyObjectModel
{
  public int1 {get;set;}
  public int2 {get;set;}

  [ScriptIgnore]
  public int3 {get;set;}
}

在我的代码中,我这样写:

MyObjectModel TheObject  = new MyObjectModel();

TheObject = LoadFromQuery(); //populates the properties using a linq-to-sql query

JavaScriptSerializer MyObjectSerializer = new JavaScriptSerializer();

string TheObjectInJson = MyObjectSerializer.Serialize(TheObject);

当我查看 json 字符串 TheObjectInJson 时,它看起来像这样:

"{\"int1\":31,\"int2\":5436}"

序列化程序为每个属性添加一个反斜杠。我尝试在类定义上方添加和删除 [Serializable] 属性,但无济于事。

有什么建议为什么会发生这种情况?

谢谢。

【问题讨论】:

    标签: c# asp.net json


    【解决方案1】:

    这应该是正确的。将 JSON 发送回浏览器时,所有属性名称都必须用引号引起来。您看到的反斜杠是 Visual Studio 在查看字符串时转义字符串(我希望您在看到此内容时没有提及)。

    如果您实际上将数据通过网络发回,它应该会遇到

    {"int1": 31, "int2":5436}
    

    这是正确的 JSON 表示法。

    有关 JSON 表示法的示例,请参阅 Wikipedia

    【讨论】:

    • 好的,你是对的,当我将字符串放入文字中并查看页面上的内容时,我看到 json 数据的格式正确。我正在查看 VS 调试器。海拉令人困惑!
    • 是的!你最终会习惯的。下次在调试器中查看字符串时,按放大镜旁边的向下箭头并选择“文本可视化器”,它将正确显示。
    【解决方案2】:

    在您的控制器中,将对象的类型(不是字符串!)作为 JsonResult 返回,即:

    [HttpGet]
            public JsonResult<MyObjectModel> GetMyObject()
            { 
                var theObject = LoadFromQuery(); //populates the properties (however)
                return Json(theObject);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多