JavaScriptSerializer如何使用空格反序列化标识符

时间:2013-06-17 14:50:51

标签: c# .net json api javascriptserializer

我遇到了与此处所述完全相同的问题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; }
}

1 个答案:

答案 0 :(得分: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; }
}