将List<T>序列化/反序列化为JSON

5

我希望能够序列化/反序列化一个通用列表,目前我所做的是这样的:

    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<T>)serializer.DeserializeObject(obj)
使用Deserialize时,反序列化错误(变为空的List<T>对象),而使用DeserializeObject时,则会抛出一个错误,指出“无法将给定的字符串反序列化为 T 类型的数组”。我将无法使用 IOStream :( 非常感谢任何见解。
更新:即使是基本的序列化/反序列化也可以正常工作,只是当我发布这篇文章时,我运气不佳。 :)

你看过这篇文章了吗? - Juan Gomez
3
你试图反序列化的 JSON 字符串是什么?你传递给 ToListObject 方法的类型 T 是什么? - carlosfigueira
无法为我工作,因为它使用了MemoryStream(从中读取回来,因此在一段时间内不可用),而我将无法使用IOStream。 - Hadesara
WCarlosfigueira:T 是泛型类名,可以是任何已定义的类。 - Hadesara
你考虑过创建一个 JavaScriptConverter 吗? - Frank Boyne
如果您正在寻找另一种用于JSON序列化的工具,您可能想尝试JSON.Net - Shahin
1个回答

10

试试这个:

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>>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接