【问题标题】:How to convert JSON to Objects with changing Keys [duplicate]如何将 JSON 转换为具有更改键的对象 [重复]
【发布时间】:2018-12-15 11:50:25
【问题描述】:
"Result": 
{
    "AKJB0000001": {
        "BANK": "AKOLA JANATA COMMERCIAL COOPERATIVE BANK",
        "IFSC": "AKJB0000001",
        "BRANCH": "RTGS-HO",
        "ADDRESS": "JANVAIBHAV,OLD COTTON MARKET,AKOLA,PIN 444001",
        "CONTACT": null,
        "CITY": "AKOLA",
        "DISTRICT": "AKOLA",
        "STATE": "MAHARASHTRA"
    },
    "AKJB0000002": {
        "BANK": "AKOLA JANATA COMMERCIAL COOPERATIVE BANK",
        "IFSC": "AKJB0000002",
        "BRANCH": "MALEGAON",
        "ADDRESS": "JANVAIBHAV, MAIN ROAD, MALEGAON PIN 444 503",
        "CONTACT": "271252",
        "CITY": "MALEGAON",
        "DISTRICT": "WASHIM",
        "STATE": "MAHARASHTRA"
    }
}

在我的JSON 中,密钥不是恒定的。我正在从App_Data 读取文件,我正在尝试使用 API 调用将IFSC 匹配银行返回给用户

public async Task<IHttpActionResult> GetBankName(string IFSCCode)
{ 
    // here my code goes
}

string IFSCCodeFile = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/ifsc-codes/" + IFSC + ".json");
JObject IFSCCodes = JObject.Parse(File.ReadAllText(IFSCCodeFile));
BankDetails BankList = JsonConvert.DeserializeObject<BankDetails>(IFSCCodes.ToString());

但是 BankList 正在返回 null。

【问题讨论】:

标签: c# json json.net


【解决方案1】:

您可以使用下面的类结构来反序列化您的 json。

class Rooot
{
    public Dictionary<string, BankDetail> Result { get; set; }
}

public class BankDetail
{
    public string BANK { get; set; }
    public string IFSC { get; set; }
    public string BRANCH { get; set; }
    public string ADDRESS { get; set; }
    public object CONTACT { get; set; }
    public string CITY { get; set; }
    public string DISTRICT { get; set; }
    public string STATE { get; set; }
}

用法:

string json = File.ReadAllText(IFSCCodeFile);

Rooot rooot = JsonConvert.DeserializeObject<Rooot>(json);

foreach (var item in rooot.Result)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value.BANK ?? "NULL");
    Console.WriteLine(item.Value.IFSC ?? "NULL");
    Console.WriteLine(item.Value.BRANCH ?? "NULL");
    Console.WriteLine(item.Value.ADDRESS ?? "NULL");
    Console.WriteLine(item.Value.CONTACT ?? "NULL");
    Console.WriteLine(item.Value.CITY ?? "NULL");
    Console.WriteLine(item.Value.DISTRICT ?? "NULL");
    Console.WriteLine(item.Value.STATE ?? "NULL");
    Console.WriteLine();
}

Console.ReadLine();

输出:

【讨论】:

  • 这个答案被接受了。
  • 很高兴听到,然后请在答案左侧打勾,使其变为绿色:)
【解决方案2】:

您可以从字典中获得帮助

JsonConvert.DeserializeObject<IDictionary<string, BankDetails>(yourInput)

因为你最外层的对象有结果参数,所以我建议你使用类进行反序列化

class ResultParser 
{
    IDictionary<string, Bankdetails> Result {get; set;}

}

然后

JsonConvert.DeserializeObject<ResultParser>(yourInput)ş

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 2014-08-16
    • 2020-11-02
    • 2019-06-21
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多