4

この方法で、Json.net JsonConvert を使用して、残りの API から JSON を逆シリアル化しています。

WebRequest request = WebRequest.Create(url);
        WebResponse ws = request.GetResponse();
          using (StreamReader sr = new StreamReader(ws.GetResponseStream()))
    {
        jsonString = sr.ReadToEnd();
    }

    RootObject root = JsonConvert.DeserializeObject<RootObject>(jsonString);

これはうまく機能しています。特定のデータセットを取得しようとすると、シリアル化すると次のエラーが生成されます。

Error reading string. Unexpected token: StartObject. Path

問題を絞り込んで、API が一部のエントリに対して誤った形式でデータを返すようにしました。したがって、返されるデータのほとんどは次のようになります。

   Income: {
    currency: {
        GBP: "48",
        USD: "32",
        EUR: "40"
    }
}, 

ただし、場合によっては、次のように返されます。

income: {
    currency: {
        GBP: {
        GBP: "0",
        USD: "0",
        EUR: "0"
    },
    USD: {
        GBP: "0",
        USD: "0",
        EUR: "0"
    },
    EUR: {
        GBP: "0",
        USD: "0",
    EUR: "0"
    }
}

短期的には、API を修正するために私にできることは何もないので、どうにかしてこれを処理する必要がありますが、私は Json.net を使用するのに比較的慣れていないため、最善の方法がわかりません。 . アドバイスをいただければ幸いです。

逆シリアル化しようとしているクラス構造は非常に単純です。

  public class RootObject
    {
        public List<Income> Income_list { get; set; }

    }

 public class Income
    {
        public Currency currency { get; set; }

    }

    public class Currency
    {
        public string GBP { get; set; }
        public string USD { get; set; }
        public string EUR { get; set; }
    }
4

1 に答える 1

1

とにかく無効なJSONの通貨値がゼロであることを考えると、JSON逆シリアル化例外をキャッチして、オブジェクトがすべてゼロに初期化された新しいIncomeオブジェクトを返す方がおそらくはるかに簡単です。Currency

于 2013-02-26T22:42:19.620 に答える