【问题标题】:Is there a way to deserialize a json response that has a dynamic name into C# class?有没有办法将具有动态名称的 json 响应反序列化为 C# 类?
【发布时间】:2013-10-24 19:07:03
【问题描述】:

我正在调用一个返回带有动态属性名称的 json 数据的 API,我正在尝试构建一个可以反序列化这个响应的类,但是这个属性名称让我很头疼。

"data": {
  "1": {
    "Item": {
      "id": "1",
      "name": "Item 1"
    }
  },
  "2": {
    "Item": {
      "id": "2",
      "name": "Item 2"
    }
  },
  "3": {
    "Item": {
      "id": "3",
      "name": "Item 3"

处理这种情况的最佳方法是什么?我正在尝试提出一个可用于删除外部节点的正则表达式,但尚未成功。

有什么帮助吗?

【问题讨论】:

  • 动态属性名是什么??
  • 上面没有名字。这就是问题所在。

标签: c# regex json deserialization


【解决方案1】:

如果“1”和“2”是动态属性名称,那么将“数据”放入字典而不是尝试使用 RegEx 操作响应呢?之后您可以简单地通过字典进行枚举。

public class Response
{
    [JsonProperty("data")]
    public Dictionary<string, ItemContainer> { get; set; }
}

public class ItemContainer
{
    [JsonProperty("Item")]
    public Item Item { get; set; }
}

【讨论】:

  • 字典缺少属性名称,所以我在其中添加了“项目”。我也实现了它,现在响应中的“项目”在执行以下操作后为空: var obj = JsonConvert.DeserializeObject(response.Content);有什么想法吗?
  • 我做错了,在仔细查看了您的代码后,我移动了一些东西,它运行良好。谢谢!
【解决方案2】:

这应该剥离它。它找到 { 的第一次出现并从那里开始,因此结果字符串将是 {......} 而不是“varname”:{......}

myjson = jsonstring.Substring (jsonstring.IndexOf('{'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多