c# - 优化的 JSON 序列化器/反序列化器作为扩展方法?

标签 c# json c#-4.0 c#-3.0 extension-methods

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

编辑

为了您的方便,下面是一个完整的功能扩展方法。如果您看到错误,请告诉我。

     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<T>(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;
        }
    }

最佳答案

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

   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<T>(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;
     }
   }

关于c# - 优化的 JSON 序列化器/反序列化器作为扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771582/

相关文章:

c# - 如何在 WinForms 中捕获 Insert+Tab 的组合?

javascript - JSON 字符串到 JavaScript 对象错误

php - 从Flash发送JSON到PHP

c#-4.0 - 如何强制执行安装程序的执行顺序

c# - ASP.NET gridview 绑定(bind)不起作用/控件不显示

c# - 将不同类型的通用对象保存在一个集合中

c# - 静态类初始化

android - 在服务器端处理 JSON

c# - 如何在 .NET 4.0 中对并发集合进行排序

c# - 如何使 WPF 数据网格的第一行成为自动添加新行的行