【问题标题】:How to parse dynamic json when having dynamic index with Json.NET使用 Json.NET 具有动态索引时如何解析动态 json
【发布时间】:2018-06-29 06:59:25
【问题描述】:

从下面的 Json 中,我想从索引 1 对象中获取“OutletID”,并且该索引将动态更改(例如:它可能有 1 个或多个数据对象)。使用 JSON.NET 中的 SelectToken 我们如何实现这一点?无需创建任何类。

{
"status": {
    "rcode": 200,
    "message": "OK"
},
"data": {
    "0": {
        "SubFranchiseID": "0",
        "OutletID": "607",
        "OutletName": "Spill "
    },
    "1": {
        "SubFranchiseID": "0",
        "OutletID": "32",
        "OutletName": "PizzaRoma"
    }
},
"hash": "b262c62ea3c8c693ad35210289a487d6963434d7"
}

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    如果你想要索引为 1 的元素,你可以这样做:

    dynamic json = JObject.Parse(@string);
    
    var data = (JToken)json.SelectToken("data");
    
    var results = data == null
        ? Enumerable.Empty<dynamic>()
        : (from item in data
           select item.First.ToObject<dynamic>());
    
    var outletId = results.ToList()[1].OutletID;
    

    【讨论】:

    • 感谢您的代码...上面的代码工作正常...除了上述方法之外,还有其他方法可以使用 SelectToken 吗?
    • 是的....因为在我的项目中,我们从数据库中获取了必填字段。例如:json.SelectToken("comment.cmets") 和 cmets 具有动态长度......所以我想构建一个像 SelectToken("comment.cmets[comment.Comments.length-1].value") 的查询?这可能吗?
    • 我不关注,但据我了解,您需要的内容可以使用上面的代码完成。您似乎想要最后一项 (var outletId = results.ToList()[results.Count() - 1].OutletID;)。
    • 是的,正确,但我的 from db 值将作为动态属性出现,因此我需要编写一个查询
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多