【问题标题】:How to create a collection like List<String,Object>?如何创建像 List<String,Object> 这样的集合?
【发布时间】:2012-01-27 14:16:01
【问题描述】:

我需要创建一个类似List&lt;String,Object&gt; 的列表,但我似乎做不到。

我创建了一个类:

public class Pair
{
    public String Key { get; set; }
    public Object Value { get; set; }
}

如果我创建一个List&lt;Pair&gt;,当我必须将其序列化为 JSON 时,我的问题就开始了,我会得到类似:

{ “密钥”:“版本”, “价值”:“3.2.1” }, { “键”:“名称”, “值”:“坐标操作” }

虽然我期待:

{ “版本”:“3.2.1” }, { “名称”:“坐标操作” }

我的猜测是我必须找到一种方法来拥有List&lt;String,Object&gt; 或控制序列化机制。后者看起来更难,看起来更像是一种技巧,而不是真正的解决方案。

另外,我不能拥有Dictionary&lt;String,Object&gt;,因为我会有重复的键。也许更需要查找。

【问题讨论】:

  • 你是怎么序列化的?我相信必须有可能向转换器提示所需的格式。
  • 我使用 JSON.Net 进行序列化。
  • 快速查看文档后,找到了自定义类序列化的方法:james.newtonking.com/projects/json/help/ContractResolver.html。应该有更简单的方法。
  • 这看起来真的很复杂!!

标签: c# json list serialization json.net


【解决方案1】:

如果您的密钥是唯一的,您可以使用 OWIN 使用的,即 IDictionary&lt;string, object&gt;

【讨论】:

  • OP 写道“我不能有 Dictionary 因为我会有重复的键。”,所以你的解决方案在这里不起作用。
【解决方案2】:

为什么要创建自己的?你可以使用KeyValuePair

List<KeyValuePair<String, Object>> nList = new List<KeyValuePair<String, Object>>();

【讨论】:

  • 只需使用上述方法创建一个自定义对象并覆盖 .ToString() 方法。我认为这样就可以了。
  • 我会选择这个答案。您必须为所需的 JSON 创建自定义序列化器/反序列化器约定,否则 .Net 将不知道哪个属性在哪里,因为没有名为“版本”或“名称”的属性。
  • 关于如何开始做这件事的任何提示?
  • @ashutoshrina 我对重复的“密钥”也有同样的需求。由于这是最好的答案,您介意发布您的解决方案吗?谢谢。
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多