C# Json使用数组项名称序列化数组

C# Json使用数组项名称序列化数组,c#,json,serialization,C#,Json,Serialization,我有下面的对象结构 public class Person { public string Name { get; set; } [System.Xml.Serialization.XmlArrayItemAttribute("Subject")] public Subject[] Subjects { get; set; } } public class Subject { public string Name { get; set; }

我有下面的对象结构

public class Person
{
    public string Name { get; set; }

    [System.Xml.Serialization.XmlArrayItemAttribute("Subject")]
    public Subject[] Subjects { get; set; }
}

public class Subject
{
    public string Name { get; set; }

    public string Grade { get; set; }
}
我正在尝试使用JsonMediaTypeFormatter序列化此对象

var person = new Person()
                {
                    Name = "John",
                    Subjects = new[]
                    {
                        new Subject
                        {
                            Name="Physics",
                            Grade="A"
                        },
                        new Subject
                        {
                            Name="Maths",
                            Grade="B"
                        }
                    } 
                };

     var jsonFormatter = new JsonMediaTypeFormatter();
     var jsonContent = new ObjectContent<Person>(person, jsonFormatter);
     var jsonContentStr = jsonContent.ReadAsStringAsync().Result;
但是我想要下面的带有数组项名称的序列化字符串格式

{
 "Name": "John",
 "Subjects": { 
              "Subject": {
                           "Name": "Physics",
                           "Grade": "A"
                        },
             "Subject": {
                          "Name": "Maths",
                          "Grade": "B" 
                        }
            }
}

通常,这是通过使用XmlArrayItemAttribute进行xml序列化来实现的。我们能为Json做些什么吗?我知道更新对象结构可以解决这个问题,但我想知道是否可以在不更新对象的情况下完成这项工作,可能是使用自定义jsonconverter?

我强烈建议您在使用此结构时三思而后行,因为大多数反序列化程序不会按您所想的方式处理此问题。虽然键在JSON中不要求是唯一的,但它们应该是唯一的,并且大多数实现都反序列化到字典或对象中,在这种情况下,重复的键不会真正起作用。这被认为是有效的JSON吗?
{
 "Name": "John",
 "Subjects": { 
              "Subject": {
                           "Name": "Physics",
                           "Grade": "A"
                        },
             "Subject": {
                          "Name": "Maths",
                          "Grade": "B" 
                        }
            }
}