[英]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.