使用JSON序列化程序将对象数组序列化为一个对象,并为C#中的每个对象指定一个命名属性

使用JSON序列化程序将对象数组序列化为一个对象,并为C#中的每个对象指定一个命名属性,c#,arrays,json,serialization,object,C#,Arrays,Json,Serialization,Object,我有一个列表,当序列化为JSON时,它会给我一个对象数组。但是,我需要序列化版本的结构如下: { "item3":{ "id":3, "name":"monkey" }, "item4":{ "id":4, "name":"turtle" } } 目前,JSON序列化的结构如下: [ { "id":3, "name":"monkey" }, { "id":4, "name":"turtle" } ]

我有一个列表,当序列化为JSON时,它会给我一个对象数组。但是,我需要序列化版本的结构如下:

{
  "item3":{
    "id":3,
    "name":"monkey"
  },
  "item4":{
    "id":4,
    "name":"turtle"
  }
}
目前,JSON序列化的结构如下:

[
  {
    "id":3,
    "name":"monkey"
  },
  {
    "id":4,
    "name":"turtle"
  }
]

我的目标是能够通过项ID而不是数字索引来引用数组(即:arr[“item3”].name而不是arr[0].name)。

您可能已经做到了,只需将数据放入字典就足以满足JaveScriptySerializer:

var dict = list.ToDictionary(
    item => "item" + item.id);
(并序列化dict)

如果没有:

例如,我手头没有个人电脑,但您应该能够:

  • 编写封装列表/数组的包装器类
  • 使用JavaScriptSerializer类
  • 创建序列化程序后,将包装器类型与自定义序列化程序关联
  • 在自定义序列化程序中,迭代数据,为每个项向字典添加一个键,即data.Add(“item”+i,list[i])
您可以通过RegisterConverter关联自定义地图:

注意,除非您也需要反序列化,否则您不需要编写反序列化


如果你被卡住了,我稍后会尝试举个例子。

我认为这会很好。谢谢你的及时回复:)好的,谢谢你。。。在进入注册转换业务之前,我会试一试。谢谢,马克