我正在处理wp7应用程序,并且我有一个向服务器发送http web请求的函数,服务器返回一个json字符串作为响应。假设字符串是这样的:DataContractJsonSerializer解析布尔字符串
{"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”。但是我无法更改服务器响应,所以我该怎么办?有任何想法吗 ?
一个快速和肮脏的解决办法是更换“IS_PAID”的所有实例:“F”到“IS_PAID”:“假的”。另一种方法是反序列化为名为isPaidRaw的字符串字段,然后您有另一个名为IsPaid的布尔类型的属性,其中您检查isPaidRaw并相应地转换为bool。 – 2013-02-22 10:19:28
我想过第二个建议,但我认为它可能会降低性能,并使其看起来很丑cz我有几个布尔字段不只是这个,所以这意味着很多额外的属性来解决这个问题 – 2013-02-22 10:48:52