【问题标题】:How would I deserialize an array like this?我将如何反序列化这样的数组?
【发布时间】:2015-01-16 14:56:36
【问题描述】:

我似乎不太明白如何将 c# 中的这个特定数组(从字符串!)反序列化为类

  [
    [
      "PrimaryContact", 
      "=", 
      "Amy R"
    ], 
    "and", 
    [
      "SecondaryContact", 
      "=", 
      "Steven G"
    ],
    "and",
    [
      "ThirdContact",
      "=",
      "Rachel S"
    ]
  ]

特别是中间部分让我感到困惑,在这种情况下是“和”。它并不总是只有三个对象,可能有无限数量的对象,每个对象之间都有一个“和”。

【问题讨论】:

  • 告诉编写 JSON 文档的人来培养大脑是一种选择吗?
  • 考虑到它是 DevExpress,这可能不是一个选项。
  • 总是“和”吗?您是否考虑从字符串中删除所有 "and", 实例?
  • @JamesThorpe 有可能是"or",,我不知道 dev express 在这里做什么。可能会去找他们。
  • This question 可能会提供一些帮助

标签: c# json deserialization


【解决方案1】:

您可以将其反序列化为对象列表:

List<object> items = new JavaScriptSerializer().Deserialize<List<object>>(json);

现在所有其他对象都将是Object[](包含String 的对象),String 之间的对象。

【讨论】:

  • 谢谢,这行得通!有点老套的解决方案,所以我可能会去 DevExpress 请求他们“培养大脑”,感谢 @dcastro!
【解决方案2】:

使用 Json.NET,将所有内容解析为 JArray,然后过滤掉偶数索引处的标记,然后将每个标记转换为 List&lt;string&gt;

您最终会得到一个 List&lt;string&gt; 的集合,其中每个列表包含 3 个元素,例如,"PrimaryContact""=""Amy R"

var array = JArray.Parse(json);

IEnumerable<List<string>> result = array.Where((token, index) => index%2 == 0)
                                        .Select(token => token.ToObject<List<string>>());

使用您的输入对我有用

【讨论】:

  • 这删除了"and" 关键字,这是必不可少的。在其他情况下,此关键字可能"or"
  • 我以为你不需要它。那么你想要的对象类型是什么?看来您想要@Guffa 建议的List&lt;object&gt; 然后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多