【问题标题】:C# Json Dynamic objectC# Json 动态对象
【发布时间】:2013-04-16 10:13:59
【问题描述】:

我正在使用 Json 动态对象

这是我用来从对象中获取数据的方法:

string = obj.item.today.price;

这很好用,问题是我必须开始使用数字示例:

string = obj.daily.10000;

它给了我一个错误

有没有办法解决这个问题?

【问题讨论】:

  • 你能输入代码吗
  • 你能命名一个变量,如:var 1000 = 'ABC'; ???
  • JSON 库支持像obj.daily["10000"] 这样的索引语法并不罕见。你试过吗?

标签: c# json object dynamic


【解决方案1】:

这是不可能的“call10000 on daily object”仅仅因为10000不是一个有效的identifier

让我解释一下这里发生了什么:

JSON 解析器生成一些运行时类型,继承自一些基本的JSON 类型(例如JsonObject)。 所以,obj 是某种生成类型,你在它上面调用属性item,它返回类似的生成类型,然后你调用today 属性等等。

最后一步很奇怪,任何类型都不能有10000属性,无论是否生成。

但是,如果库支持对象的键值访问,你可以尝试写

obj.daily["10000"]

或将 obj 转换为 JObject(假设您使用的是 JSON.NET) 并调用Property 方法:

var jsonObject = (JObject) obj;
var propertyValue = jsonObject.Property("10000").Value;

【讨论】:

  • 是的,我尝试了 obj.daily["10000"],但仍然给我标识符错误。但是,如果所有名称都是数字,那么如何反序列化 json 代码呢?
  • @Tom 库可以在反序列化对象中维护内部字典并在那里保存属性。
【解决方案2】:

如果你使用 Json.NET

string json = "{ dayly : { 1000 : 'asd' } }";
dynamic d = JsonConvert.DeserializeObject(json);
Console.WriteLine((d.dayly as JObject).Property("1000").Value);

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 2021-12-13
    • 2012-11-20
    • 1970-01-01
    • 2019-10-21
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多