gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:03:00 25 4
gpt4 key购买 nike

我想尽可能轻松地将任何对象序列化为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com