问题描述
我有一个问题,其中DataContractSerializer为所有变量返回null。好像看不到它们或其他东西。我正在使用它将json文件反序列化为对象。我为另一个使用3个字符串属性的类的json文件工作。这一个由40个属性组成,主要是字符串和一些布尔值。我已经研究了几个小时,但似乎找不到我做错的事情。我什至只用1个字符串属性尝试了它,但它仍然返回null。这是只有1个字符串属性和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。之后,它运行得很好。