0

私は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」ではありません。しかし、サーバーの応答を変更できないので、どうすればよいですか?何か案は ?

4

2 に答える 2

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";}
}
于 2013-02-23T01:01:41.437 に答える
0

Json.NETの使用を検討する必要があります

于 2013-02-23T00:58:46.407 に答える