Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据C#中的模型数动态构造JSON密钥名?_C#_Json_Collections - Fatal编程技术网

如何根据C#中的模型数动态构造JSON密钥名?

如何根据C#中的模型数动态构造JSON密钥名?,c#,json,collections,C#,Json,Collections,例如: { "Books": [ { "Name-1":"The Alchemist", "Type-1":"Fiction" }, { "Name-2":"Silent Spring", "Type-2"

例如:

{
   "Books": [
       {
           "Name-1":"The Alchemist",
           "Type-1":"Fiction"
       },
       {
           "Name-2":"Silent Spring",
           "Type-2":"Non-Fiction"
       },
       {
           "Name-3":"1984",
           "Type-3":"Fiction"
       }
   ]
}
我用属性“Name”和“Type”定义了Books模型。如何从Books collection创建上述JSON?

将书籍映射到Dictionary并序列化它们。 比如:

serializer.Serialize(new{Books=Books.Select((x,i)=>
新字典{
{$“{nameof(x.Name}-{i+1}”,x.Name},
{$“{nameof(x.Type}-{i+1}”,x.Type}
}});
然而,拥有这样一个Json看起来非常奇怪(我的意思是将索引作为同一数组中对象的属性名)

您需要通过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();
        }

我可以问一下您为什么要这样做吗?在我们已经拥有的用于处理JSON的库中,这样做不容易的原因是这个要求非常奇怪,如果没有动态映射来处理这个问题,使用这个JSON的应用程序很难正确地获得映射。我理解这个问题。但是API将在今年被使用方式