[英]DataContractSerializer returns null for all the variables when I try to deserialize
我有一个问题,DataContractSerializer 为我的所有变量返回 null。 就好像它没有看到它们什么的。 我正在使用它将 json 文件反序列化为一个对象。 我让它为另一个 json 文件工作,该文件使用另一个具有 3 个字符串属性的类。 这个由 40 个属性组成,主要是字符串和一些布尔值。 我已经研究了几个小时,我似乎无法找到我做错了什么。 我什至只用 1 个字符串属性尝试过它,它仍然返回 null。 这是一个只有 1 个 string 属性和 1 个 bool 属性的简化版本。 任何建议都非常感谢。
谢谢
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; }
}
}
我通过将这个反序列化的代码与我之前的代码进行比较,设法找到了问题所在。 唯一的区别是 Json 文件中变量的名称。 它们包含空间的 Unicode (x00200) 的事实导致 DataContractDeserializer 内部出现一些问题。 我相信它把它看作是空间,所以它看到的不是“Proposal_x0020_Type”,而是“Proposal_ _Type”,但我不确定。 无论如何,解决方案是从 Json 文件中的所有变量中删除 x0020。 之后它工作得很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.