DataContractJsonSerializer解析布尔字符串

时间:2013-02-22 10:04:19

标签: c# json windows-phone-7 parsing boolean

我正在开发一个wp7应用程序,我有一个向服务器发送http Web请求的函数,服务器返回一个json字符串作为响应。假设字符串是这样的:

{"products" : 
[
{"PRODUCT_ID" : "1", "PRODUCT_NAME" : "product1","IS_PAID" : "F"},
{"PRODUCT_ID" : "30","PRODUCT_NAME" : "product2","IS_PAID" : "T"},
{"PRODUCT_ID" : "36","PRODUCT_NAME" : "product3","IS_PAID" : "F"}
]}

我的产品类是这样的:

[DataContract]
public class Product
{        
    [DataMember(Name = "PRODUCT_ID")]
    public long productId { get; set; }

    [DataMember(Name = "PRODUCT_NAME")]
    public string productName { get; set; }

    [DataMember(Name = "IS_PAID")]
    public bool isPaid { get; set; }
}

在我的代码中,当我试图解析json响应时:

DataContractJsonSerializer serailizer = new DataContractJsonSerializer(typeof(Product[]));
MemoryStream reader = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));
SynchronizeResponse mResponseObject = (Product[])serailizer.ReadObject(reader);

我得到一个例外:

  

反序列化MyNameSpance.Product类型的对象时出错。出现FormatException

经过大量调试后我发现问题出现在布尔属性“isPaid”中,并且该值必须为“True”或“False”;不是“T”和“F”。但我无法改变服务器响应,所以我该怎么办?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

显然,“T”不是bool的有效值。

所以,答案是:不要使用 bool。改为使用字符串。

[DataMember(Name = "IS_PAID")]
public string isPaidString { get; set; }

public bool isPaid
{
    get {return isPaidString == "T";}
    set {isPaidString = value ? "T" : "F";}
}

答案 1 :(得分:0)

您应该考虑使用Json.NET