【问题标题】:DataContractSerializer returns null for all the variables when I try to deserialize当我尝试反序列化时,DataContractSerializer 为所有变量返回 null
【发布时间】:2021-01-12 03:19:21
【问题描述】:

我有一个问题,DataContractSerializer 为我的所有变量返回 null。就好像它没有看到它们或什么的。我正在使用它将 json 文件反序列化为对象。我让它为另一个使用另一个具有 3 个字符串属性的类的 json 文件工作。这个由 40 个属性组成,主要是字符串和一些布尔值。我已经为此工作了几个小时,但我似乎无法找到我做错了什么。我什至只尝试了 1 个字符串属性,但它仍然返回 null。这是一个简化版本,只有 1 个字符串属性和 1 个布尔属性。任何建议都非常感谢。

谢谢

JSON: [{"Proposal_x0020_Type":"Lite Proposal","BI_x0020_Criteria_x0020_1":true}]

尝试反序列化字符串的函数:

public Proposal[] Deserializer(string jsonFile)
    {

        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonFile));

        DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Proposal[]));

        Proposal[] projectArr = (Proposal[])deserializer.ReadObject(ms);

        Console.WriteLine(jsonFile);

        Console.ReadLine();

        return projectArr;

    }

反序列化器应该创建的对象的类: 命名空间PMIS

{

 [DataContract]

public class Proposal

{

    [DataMember(Order = 0)]

    public string Proposal_x0020_Type { get; set; }

    [DataMember(Order = 1)]

    public bool BI_x0020_Criteria_x0020_1 { get; set; }

}

}

【问题讨论】:

  • 使用DataContractJsonSerializer这个json可以反序列化为Dictionary<string, object>[]。否则,您可以使用其他一些序列化程序。例如,json.net。

标签: c# serialization json-deserialization datacontractserializer


【解决方案1】:

我通过将这个反序列化的代码与我之前的代码进行比较,设法找到了问题所在。唯一的区别是 Json 文件中变量的名称。它们包含空间的 Unicode (x00200) 的事实导致 DataContractDeserializer 内部出现一些问题。我相信它把它看作是空间,所以不是看到“Proposal_x0020_Type”,而是看到“Proposal_ _Type”,但我不确定。无论如何,解决方案是从 Json 文件中的所有变量中删除 x0020 。之后它工作得非常好。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多