簡體   English   中英

C#Json如何使用可能是任何int類型的鍵來反序列化某些內容

[英]C# Json how to deserialize something with a key that could be any kind of int

我正在開發Xamarin應用程序,並且將Newtonsoft用於Json。 但是我在處理返回的某些數據時遇到了麻煩。

{
"ok": true,
"payment-methods": [
     {
     "id": "39sahf92ka9s02",
         "type": "ideal",
            "options": {
                "issuers": {
                    99: "Test Issuer"
                }
            }
        }
    ],
}

我不知道如何到達測試發行者,因為Key值可以是任何整數。

使用Dictionary很有意義,但是隨后出現以下異常:“ System.NullReferenceException:對象引用未設置為對象的實例。json”

我有以下模型:

[JsonObject(MemberSerialization.OptIn)]
public class PaymentOptions
{
    [JsonProperty("ok")]
    public Boolean OK { get; set; }
    [JsonProperty("payment-methods")]
    public List<PaymentMethods> PaymentMethods { get; set; }
}
public class PaymentMethods
{
    [JsonProperty("id")]
    public string Id { get; set; }
    [JsonProperty("type")]
    public string Type { get; set; }
    [JsonProperty("options")]
    public Options Options { get; set; }
}
public class Options
{
    [JsonProperty("issuers")]
    public IDictionary<int, string> Issuers { get; set; }
}

我通過以下方法反序列化Json:

var deserializedGetPaymentOptions = JsonConvert.DeserializeObject<Models.PaymentMethods>(await responseGetPaymentOptions.Content.ReadAsStringAsync());

之后,我嘗試在foreach循環中使用它來閱讀它:

foreach (KeyValuePair<int, string> issuerFromDict in deserializedGetPaymentOptions.Options.Issuers)

您是否嘗試過將99作為json表示形式的字符串?

...
"issuers": {
    "99": "Test Issuer"
}
...

您應該讓newtonsoft處理到int的轉換。

我通過執行以下操作修復了該問題:

var deserializedGetPaymentOptions = JsonConvert.DeserializeObject<Models.PaymentOptions>(await responseGetPaymentOptions.Content.ReadAsStringAsync());
                foreach (var desPayOp in deserializedGetPaymentOptions.PaymentMethods) {
                    Debug.WriteLine("start foreach");
                    foreach (KeyValuePair<int, string> issuerFromDict in desPayOp.Options.Issuers)
                    {
                        Debug.WriteLine(issuerFromDict.Key.ToString() + " : " + issuerFromDict.Value);
                    }
                }

現在,我從PaymentOptions而不是PaymentMethods反序列化它,然后遍歷List,然后遍歷字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM