【问题标题】:How to construct JSON key name dynamically based on number of model in C#?如何根据 C# 中的模型数量动态构造 JSON 键名?
【发布时间】:2020-11-13 23:03:45
【问题描述】:

例如:

{
   "Books": [
       {
           "Name-1":"The Alchemist",
           "Type-1":"Fiction"
       },
       {
           "Name-2":"Silent Spring",
           "Type-2":"Non-Fiction"
       },
       {
           "Name-3":"1984",
           "Type-3":"Fiction"
       }
   ]
}

我定义了具有“名称”和“类型”属性的 Books 模型。如何从 Books 集合中创建上述 JSON?

【问题讨论】:

  • 请问您为什么要这样做?在我们已经拥有的用于 JSON 处理的库中这不容易做到的原因是,这个要求非常奇怪,它会使使用这个 JSON 的应用程序很难获得正确的映射没有动态映射来处理这个。
  • 我理解这种担忧。但是 API 会以这种方式使用

标签: c# json collections


【解决方案1】:

将书籍映射到 Dictionary 并对其进行序列化。 比如:

    serializer.Serialize(new { Books = books.Select((x, i) => 
        new Dictionary<string, string> { 
            { $"{nameof(x.Name}-{i+1}", x.Name }, 
            { $"{nameof(x.Type}-{i+1}", x.Type }
        }});

However, it looks very WIERD to have such a Json (I mean with indexes as property names of objects in same array)

【讨论】:

    【解决方案2】:

    需要通过JsonTextWriter生成json

            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            using (JsonWriter writer = new JsonTextWriter(sw))
            {
                writer.WriteStartObject();
    
                writer.WritePropertyName("Books");
    
                writer.WriteStartArray();
    
                //your for
    
    
                writer.WriteEndArray();
    
                writer.WriteEndObject();
            }
    

    similar Issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2015-10-26
      • 2015-06-20
      • 2017-03-27
      相关资源
      最近更新 更多