如何从IList <x>转换为JSON字符串并返回?</x>

时间:2013-11-07 19:08:16

标签: c# json

我有以下课程:

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>

3 个答案:

答案 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库。

请参阅:http://james.newtonking.com/json/help/index.html