我有以下课程:
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>
答案 0 :(得分:3)
您的FromJSONString
方法返回T
类型的实例。您的示例中的调用会将TestQuestionHeader
作为T
传递。您只需要为T
提供正确的类型。
您需要将该行更改为:
var a = JSON.FromJSONString<List<TestQuestionHeader>>(test.Questions);
答案 1 :(得分:2)
那是因为你传递TestQuestionHeader
作为泛型类型参数。请尝试以下方法:
IList<TestQuestionHeader> a = JSON.FromJSONString<List<TestQuestionHeader>>(test.Questions);
答案 2 :(得分:1)
使用JSON.NET,.NET的最佳JSON库。