.NET 4有内置的JSON序列化器/解串器吗?

Che*_*ung 59 .net serialization json jsonserializer

.NET 4是否附带任何序列化/反序列化JSON数据的类?

  • 我知道有第三方库,比如JSON.NET,但我正在寻找内置于.NET中的东西.

  • 我在MSDN上找到了数据合约,但它适用于WCF,而不适用于Winforms或WPF.

Ben*_*son 39

您可以在任何地方使用DataContractJsonSerializer类,它只是一个.net类,并不仅限于WCF.有关如何在此处此处使用它的更多信息.

  • 谢谢,MSDN说Assembly中的DataContractJsonSerializer类:System.Runtime.Serialization(在System.Runtime.Serialization.dll中)。但是,VS2010显示错误,找不到 DataContractJsonSerializer 。 (2认同)
  • 找到那个〜关于目标框架问题,请参阅:http://stackoverflow.com/questions/1825417/where-is-system-servicemodel-web-dll (2认同)

Dar*_*rov 28

JavaScriptSerializer类(虽然你需要引用该 System.Web.Extensions程序集,该类在WinForms/WPF应用程序中完美运行).即使DataContractJsonSerializer类是为WCF设计的,它也可以在客户端应用程序中正常工作.

  • 仅供参考:可以找到JsonSerializer和JavaScriptSerializer之间的比较[http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize](here). (5认同)

vin*_*nsa 12

使用此通用类来序列化/反序列化 JSON。您可以轻松序列化复杂的数据结构,如下所示:

Dictionary<string, Tuple<int, int[], bool, string>>
Run Code Online (Sandbox Code Playgroud)

JSON 字符串,然后将其保存在应用程序设置中,否则

public class JsonSerializer
{
    public string Serialize<T>(T Obj)
    {
        using (var ms = new MemoryStream())
        {
            DataContractJsonSerializer serialiser = new DataContractJsonSerializer(typeof(T));
            serialiser.WriteObject(ms, Obj);
            byte[] json = ms.ToArray();
            return Encoding.UTF8.GetString(json, 0, json.Length);
        }
    }

    public T Deserialize<T>(string Json)
    {
        using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(Json)))
        {
            DataContractJsonSerializer serialiser = new DataContractJsonSerializer(typeof(T));
            var deserializedObj = (T)serialiser.ReadObject(ms);
            return deserializedObj;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)