1

我有以下课程:

public class TestQuestionHeader
{
    public int Id { get; set; }
    public int QId { get; set; }
}

和 JSON 方法:

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

我使用这些如下:

IList<TestQuestionHeaders> testQuestionHeaders = xxx;
string test.Questions = JSON.ToJSONString(testQuestionHeaders);
var a = JSON.FromJSONString<TestQuestionHeader>(test.Questions);

有人可以帮我解释为什么变量a包含 TestQuestionHeader 而不是IList<TestQuestionHeader>

4

3 回答 3

3

您的FromJSONString方法返回类型的实例T。您在示例中的调用传递TestQuestionHeaderT. 您只需要为T.

您需要将该行更改为:

var a = JSON.FromJSONString<List<TestQuestionHeader>>(test.Questions);
于 2013-11-07T19:12:59.613 回答
2

那是因为您TestQuestionHeader作为泛型类型参数传递。尝试以下操作:

IList<TestQuestionHeader> a = JSON.FromJSONString<List<TestQuestionHeader>>(test.Questions);
于 2013-11-07T19:12:14.260 回答
1

使用 JSON.NET,这是 .NET 的最佳 JSON 库。

见:http: //james.newtonking.com/json/help/index.html

于 2014-08-14T22:36:48.937 回答