【问题标题】:NewtonSoft JsonConvert SerializeObject Dictionary of Object Escape CharsNewtonSoft JsonConvert SerializeObject 对象转义字符字典
【发布时间】:2016-10-19 11:47:22
【问题描述】:

我在使用有关 WCF 中的转义字符的 JsonConvert.SerializeObject 方法时遇到了一些问题。我的 web 方法返回一个 Stream,如下所示:

 return new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(myObject)));

除了 myObject 的一个属性是<string, object> 的字典之外,这很好用。所有简单类型都正确序列化,但是当我尝试将自定义类添加为值时,我得到的是返回的类型而不是数据。意识到这来自于在我的自定义类上调用 .ToString 的序列化程序,我尝试用以下方法覆盖它:

public override string ToString()
    {
        return JsonConvert.SerializeObject(this);
    }

但是返回的数据现在包含转义字符

{       
    "my_dictionary":    {
      "elem_1": "{\"Prop1\":null,\"Prop2\":3}",
      "elem_2": "{\"Prop1\":null,\"Prop2\":3}",
      "int_property" : 123
   }
}

关于如何避免我的自定义类以这种方式转义并作为数组返回的任何想法?

提前致谢,马特

【问题讨论】:

    标签: c# json wcf dictionary json.net


    【解决方案1】:

    我使用 JavaScriptSerializer(只需将“Object”替换为您的自定义类)

    using System.Web.Script.Serialization;
    
    List<Object> list = new List<Object>();
    
    JavaScriptSerializer jss = new JavaScriptSerializer();
    
    string res = jss.Serialize(list);
    

    并使用“res”值获取此格式:

    [{"IdEmpresa":1,"Nombre":"Test","URL":"http:/localhost:8080/","Activo":true},IdEmpresa":2,"Nombre":"Test2,","URL":"http://localhost:8081/","Activo":true}]
    

    【讨论】:

      【解决方案2】:

      我意识到代码中有错误。被序列化的类实际上返回了一个 Dictionary 对象到字符串的转换导致了我观察到的行为,实际上序列化程序完全能够正确地序列化对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多