C# Json 反序列化在 json 字符串中的第一个字符处失败

C# Json Deserialization failing at first char in json string

我目前和我之前的很多人一样在反序列化 json 字符串的问题上苦苦挣扎。可悲的是,我无法找到与我的问题非常相似的任何内容。我尝试了多种解决方案,但 none 起作用了。

稍微还原并清理所有内容后,我遇到了现在面临的问题:每次我尝试反序列化 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);

这并不奇怪,因为它是所有内容都被解析的部分,而且人们最有可能出错。

所以出于测试目的,我制作了一个虚拟 class 反序列化为:

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

并尝试解析:

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

然而,即使是这个简单的测试也无法正常工作,并抛出与我在第一个更复杂的测试中遇到的相同的异常: "System.Runtime.Serialization.SerializationException" 发生在 System.Runtime.Serialization.dll .

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

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

由于我的知识已经穷尽,我希望这里有人能指出错误。

您必须使用 DataContractJsonSerializer 而不是 DataContractSerializer 请参阅此 link 了解更多信息。

顺便说一句,我建议 JSON.NET 查看此 link 了解更多信息。