DataContractJsonSerializer解析布尔字符串
本文关键字:字符串 布尔 DataContractJsonSerializer | 更新日期: 2023-09-27 18:00:27
我正在开发一个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 类型的对象时出错
经过大量调试,我发现问题出在布尔属性"isPayed"中,并且该值必须是"True"或"False";而不是"T"answers"F"。但是我无法更改服务器响应,我该怎么办?有什么想法吗?
显然,"T"不是bool
的有效值。
因此,答案是:不要使用bool
。请改用字符串。
[DataMember(Name = "IS_PAID")]
public string isPaidString { get; set; }
public bool isPaid
{
get {return isPaidString == "T";}
set {isPaidString = value ? "T" : "F";}
}
您应该考虑使用Json.NET