我正在處理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