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

发布于 2024-10-05 21:23:18 字数 385 浏览 2 评论 0原文

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

{
  "item3":{
    "id":3,
    "name":"monkey"
  },
  "item4":{
    "id":4,
    "name":"turtle"
  }
}

目前,JSON 序列化的结构如下:

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

我的目标是能够通过项目 ID 而不是数字索引(即 arr["item3"].名称而不是 arr[0].name)。

I have a List that, when serialized as JSON gives me an array of objects. However, I need the serialized version to be structured as follows:

{
  "item3":{
    "id":3,
    "name":"monkey"
  },
  "item4":{
    "id":4,
    "name":"turtle"
  }
}

Currently, the JSON serialization is structured like this:

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

My goal is to be able to reference the array by item ID instead of numeric index (ie. arr["item3"].name instead of arr[0].name).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南巷近海 2024-10-12 21:23:18

您可能会这样做,只需将数据放入字典中就足够了 JaveScripySerializer:(

var dict = list.ToDictionary(
    item => "item" + item.id);

并序列化字典)

如果没有:

我没有方便的 PC 作为示例,但您应该能够:

  • 编写一个包装类来封装list/array
  • 在创建序列化器后使用 JavaScriptSerializer 类
  • ,将包装类型与
  • 自定义序列化器中的自定义序列化器相关联,迭代数据,向每个项目的字典添加一个键,即 data.Add("item"+我,列表[i]);

您可以通过 RegisterConverters 关联自定义映射: http: //msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx

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

如果您遇到困难,我稍后会尝试举一个例子。

You might did that just putting the data into a dictionary is enough for JaveScripySerializer:

var dict = list.ToDictionary(
    item => "item" + item.id);

(and serialize dict)

If not:

I don't have a PC handy for an example, but you should be able to:

  • write a wrapper class that encapsulated the list/array
  • use the JavaScriptSerializer class
  • after creating the serializer, associate the wrapper-type with a custom serializer
  • in the custom serializer, iterate over the data, adding a key to the dictionary per-item, i.e. data.Add("item"+i,list[i]);

You associate custom maps via RegisterConverters: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx

Note you don't need to write a deserialize unless you need that too.

If you get stuck, I'll try to ad an example later.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文