2

我遇到了与此处描述的完全相同的问题https://stackoverflow.com/questions/12565464/javascriptserializer-deserialize-an-identifier-with-space但没有人回答我会再试一次,

别人创建的API,形式为

[{"AdvertId":"1234567","Price Original":"500","Sold":"False"}]

应用程序已经使用 JavascriptSerilalization 来填充许多其他 API 上的命名属性,所以真的不想改变它,但是我保存这个数据的类不能有一个带有空格的属性“原始价格”,这不能被删除或替换为 _ 或其他东西。是否可以调用任何方法将字符串转换为不同的东西?

是否有任何解决方案或者我必须使用 JSON.net 来反序列化,是我读过的 DataContracts 上的一些内容,这些可能会有所帮助,但我似乎无法找到如何让它工作我的代码,如果不调查这条路径,我很高兴知道这是可能的。

提前谢谢了

样本类

Class Sample
{
    public int AdvertId { get; set; }
    public string Price Original { get; set; }
    public bool Sold { get; set; }
}
4

1 回答 1

4

您仍然可以使用内置类型,但您需要使用DataContractJsonSerializer而不是JavaScriptSerializer,并添加适当的DataContractDataMember属性 - 实现有点不同,但仍然非常简单。

一件事 - 你的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; }
}
于 2013-06-17T15:02:21.880 回答