我遇到了与此处所述完全相同的问题https://stackoverflow.com/questions/12565464/javascriptserializer-deserialize-an-identifier-with-space,但没有人回答以为我会再试一次,
由其他人以
的形式创建的API[{"AdvertId":"1234567","Price Original":"500","Sold":"False"}]
应用程序已经使用JavascriptSerilalization来填充许多其他API上的命名属性,所以不想真正改变它,但是我的类保存这些数据不能有一个空格,其中包含“Price Original”,这个不能删除或替换为_或其他东西。是否有任何方法可以调用将字符串转换为不同的字符串?
是否有任何解决方案或者我必须使用JSON.net进行反序列化,我读过的DataContracts上的一些内容可能会有所帮助,但我似乎无法找到如何获得这个为我的代码工作,很高兴知道没有调查这条路是可能的。
非常感谢提前
样本类
Class Sample
{
public int AdvertId { get; set; }
public string Price Original { get; set; }
public bool Sold { get; set; }
}
答案 0 :(得分:4)
您仍然可以使用内置类型,但您需要使用DataContractJsonSerializer
代替JavaScriptSerializer
,并添加相应的DataContract
和DataMember
属性 - 实现有点不同,但仍然非常简单。
有一件事 - 您的Sold
属性是布尔值,但您的JSON示例中有一个字符串 - 布尔值是有效的JSON类型,因此您可以删除引号。
一些有效的代码:
JSON:
[{"AdvertId":"1234567","Price Original":"500","Sold":false}]
C#:
var ser = new DataContractJsonSerializer(typeof(Sample[]));
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(JSON))) {
Sample[] s = (Sample[])ser.ReadObject(ms);
}
[DataContract]
public class Sample {
[DataMember]
public int AdvertId { get; set; }
[DataMember(Name = "Price Original")]
public string PriceOriginal { get; set; }
[DataMember]
public bool Sold { get; set; }
}