优化的JSON序列化器/解串器作为扩展方法?

我想尽可能容易地将任何对象序列化为JSON,然后简单地将其转换回type = safe对象。 任何人都可以告诉我在“FromJSONString”扩展方法中我做错了什么?

编辑

为方便起见,下面是一个完整的function扩展方法。 如果你看到错误,请告诉我。

public static string ToJSONString(this object obj) { using (var stream = new MemoryStream()) { var ser = new DataContractJsonSerializer(obj.GetType()); ser.WriteObject(stream, obj); return Encoding.UTF8.GetString(stream.ToArray()); } } public static T FromJSONString(this string obj) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj))) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); T ret = (T)ser.ReadObject(stream); return ret; } } 

在inheritance对象的情况下,这不能正常工作。

反序列化仅返回基础对象,而不返回序列化对象。 如下所示更改序列化将解决此问题。

 public static String ToJSONString(this Object obj) { using (var stream = new MemoryStream()) { var ser = new DataContractJsonSerializer(typeof(object)); ser.WriteObject(stream, obj); return Encoding.UTF8.GetString(stream.ToArray()); } } 

您必须将JSON字符串提供给要解码的MemoryStream。 具体来说,您必须更改:

  MemoryStream stream1 = new MemoryStream(); 

实际上检索字符串字节:

  MemoryStream stream1 = new MemoryStream(Encoding.UTF8.GetBytes(obj)) 

话虽这么说,我还要确保做适当的内存清理并处理我的对象…而且,不是使用StreamReader(也应该处理),只需将内存流重新编码为UTF-8字符串。 请参阅下面的清理代码。

  public static String ToJSONString(this Object obj) { using (var stream = new MemoryStream()) { var ser = new DataContractJsonSerializer(obj.GetType()); ser.WriteObject(stream, obj); return Encoding.UTF8.GetString(stream.ToArray()); } } public static T FromJSONString(this string obj) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj))) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); T ret = (T)ser.ReadObject(stream); return ret; } }