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

本文关键字:Json 字符 失败 第一个 字符串 反序列化 | 更新日期: 2023-09-27 18:04:28

我目前正在挣扎,因为很多人在我之前的问题与反序列化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。SerializationException"发生在system . runtime . serialize .dll .

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

我尝试了多种编码,但据我所知,这只会导致在解析来自和外部源的东西时出现问题,例如WebRequest。

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

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

您必须使用DataContractJsonSerializer而不是DataContractSerializer,请参阅此链接以获取更多信息。

顺便说一句,我推荐JSON。