我有以下课程:

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>

最佳答案

您的FromJSONString方法返回一个T类型的实例。您的示例中的呼叫将TestQuestionHeader传递为T。您只需要为T提供正确的类型。

您需要将该行更改为:

var a = JSON.FromJSONString<List<TestQuestionHeader>>(test.Questions);

10-05 22:31