Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Json如何使用任何类型的int键反序列化某些内容_C#_Xamarin_Json.net - Fatal编程技术网

C#Json如何使用任何类型的int键反序列化某些内容

C#Json如何使用任何类型的int键反序列化某些内容,c#,xamarin,json.net,C#,Xamarin,Json.net,我正在开发一个Xamarin应用程序,我使用Newtonsoft处理Json。 但是我在处理我得到的一些数据时遇到了麻烦 { "ok": true, "payment-methods": [ { "id": "39sahf92ka9s02", "type": "ideal", "options": { "issuers": { 99: "Test Issuer"

我正在开发一个Xamarin应用程序,我使用Newtonsoft处理Json。 但是我在处理我得到的一些数据时遇到了麻烦

{
"ok": true,
"payment-methods": [
     {
     "id": "39sahf92ka9s02",
         "type": "ideal",
            "options": {
                "issuers": {
                    99: "Test Issuer"
                }
            }
        }
    ],
}
我不知道如何到达测试颁发者,因为键值可以是任何整数

使用字典很有意义,但我得到了以下异常:“System.NullReferenceException:Object reference未设置为Object.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; }
}
[JsonObject(MemberSerialization.OptIn)]
公共类支付选项
{
[JsonProperty(“ok”)]
公共布尔OK{get;set;}
[JsonProperty(“付款方式”)]
公共列表PaymentMethods{get;set;}
}
公共类支付方法
{
[JsonProperty(“id”)]
公共字符串Id{get;set;}
[JsonProperty(“类型”)]
公共字符串类型{get;set;}
[JsonProperty(“期权”)]
公共选项选项{get;set;}
}
公共类选项
{
[JsonProperty(“发行人”)]
公共IDictionary发行者{get;set;}
}
我通过以下方式反序列化Json:

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);
                    }
                }
var deserializedGetPaymentOptions=JsonConvert.DeserializeObject(wait responseGetPaymentOptions.Content.ReadAsStringAsync())

然后我试着在foreach循环中使用它来阅读:


foreach(反序列化dgetPaymentOptions.Options.Issuers中的KeyValuePair issuerFromDict)

您是否尝试过在json表示中使用99作为字符串

...
"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);
                    }
                }
var deserializedGetPaymentOptions=JsonConvert.DeserializeObject(wait responseGetPaymentOptions.Content.ReadAsStringAsync());
foreach(反序列化dgetPaymentOptions.PaymentMethods中的var desPayOp){
Debug.WriteLine(“启动foreach”);
foreach(desPayOp.Options.Issuers中的KeyValuePair issuerFromDict)
{
Debug.WriteLine(issuerFromDict.Key.ToString()+“:”+issuerFromDict.Value);
}
}

现在,我从PaymentOptions而不是PaymentMethods反序列化它,然后在列表中循环,然后在字典中循环。

在foreach循环中读取发行人有什么不对?:)@姆拉登布。可能什么都没有,我想我在模型中将它声明为字典是有原因的?但我不确定:xtry枚举属性可能:您能展示一下如何将Json反序列化为对象吗?您的Json示例高于有效的Json吗?我确实从API中得到了一个字符串,但是我可以问编程那个部分的人为什么做出这个选择,也许可以说服他把它改成字符串。但是,我仍然不知道该属性将被称为什么(这可能也是一个问题?),在这方面,您确实需要信任newtonsoft反序列化。但是,我仍然不知道该属性将被称为什么(这可能也是一个问题?)您指的是哪个属性?99?对象:名称-值对的无序集合,其中名称(也称为键)是字符串。(参见)