C#Json反序列化在json字符串

时间:2015-07-24 01:48:39

标签: c# json serialization encoding deserialization

我目前正在努力解决有关json字符串反序列化问题的许多人。可悲的是,我无法找到任何与我的问题相似的东西。我尝试了多种解决方案但没有工作。

在恢复了一点并清理了我遇到的问题之后我现在面临的问题是:每当我尝试反序列化json字符串时,DataContractSerializer在尝试读取字符串时都会抛出异常。

此处发生异常:

    public static T DeserializeJSON<T>(string json)
    {
        T obj;

        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
        DataContractSerializer ser = new DataContractSerializer(typeof(T));

        obj = (T)ser.ReadObject(ms);

        return obj;
    }

在行中:

        obj = (T)ser.ReadObject(ms);

这并不令人惊讶,因为它是所有内容都被解析的部分,并且人们会发现出现问题的最大可能性。

因此,出于测试目的,我创建了一个虚拟类来反序列化为:

[DataContract]
public class JsonTestObject
{
    [DataMember]
    string name;
}

试图解析:

        JsonTestObject obj = new JsonTestObject();
        obj = JSONSerializer.DeserializeJSON<JsonTestObject>("{\"name\" : \"works\"}");

然而,即使这个简单的测试也不会起作用,并且抛出了我在第一次更复杂的测试中得到的相同异常: System.Runtime.Serialization.dll中出现“System.Runtime.Serialization.SerializationException”。

第一层的数据无效。第1行,第1位。

我尝试了多种编码,但据我所知,这只会在从外部源解析某些内容时导致问题,例如WebRequest。

当我知道自己的时候,我希望有人可以发现错误。

1 个答案:

答案 0 :(得分:0)

您必须使用DataContractJsonSerializer代替DataContractSerializer,请参阅此link了解详情。

BTW我建议JSON.NET查看此link了解更多信息。