【问题标题】:serialize/deserialize List<T> to JSON将 List<T> 序列化/反序列化为 JSON
【发布时间】:2011-05-26 22:35:45
【问题描述】:

我希望能够序列化/反序列化一个通用列表,到目前为止我是这样的

    public static string ToJson(this object obj, int recursionDepth = 100) 
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = recursionDepth;
        return serializer.Serialize(obj);
    }

    public static List<T> ToListObject<T>(this string obj, int recursionDepth = 100)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = recursionDepth;
        List<T> returnList = serializer.Deserialize<List<T>>(obj);
        return returnList;
    }

我也试过(List&lt;T&gt;)serializer.DeserializeObject(obj)

使用Deserialize,它反序列化错误(到一个空的List&lt;T&gt; 对象),而使用DeserializeObject,它抛出一个错误,提示“无法将给定的字符串反序列化为T 数组”。而且我将无法使用 IOStream :( 真的会获得任何见解。

更新:即使是基本的序列化/反序列化工作,我发布此内容的时间也不是我的一天。 :)

【问题讨论】:

  • 你看过this的文章吗?
  • 您要反序列化的 JSON 字符串是什么?您传递给 ToListObject 方法的类型 T 是什么?
  • 对我不起作用,因为它使用 MemoryStream(从它读取,所以它在一段时间内不可用),我将无法使用 IOStream。
  • WCarlosfigueira: T 是泛型类名,可以是任何定义的类
  • 您是否考虑过创建JavaScriptConverter

标签: c# json serialization generic-list


【解决方案1】:

试穿一下尺寸:

public static T ToObject<T>(this string obj, int recursionDepth = 100)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    serializer.RecursionLimit = recursionDepth;
    return serializer.Deserialize<T>(obj);
}

然后像这样使用它:

mystring.ToObject<List<MyClass>>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2021-06-14
    • 2015-06-07
    相关资源
    最近更新 更多