C# 如何创建JObject的JArray?

C# 如何创建JObject的JArray?,c#,asp.net,json.net,C#,Asp.net,Json.net,我试图用JObject数组填充对象details。这些信息可在联系人地址中找到,这是一个地址模型[] 使用以下代码,我得到以下错误: Newtonsoft.Json.JsonReaderException:解析值后遇到意外字符 JArray addresses = new JArray(); foreach (AddressModel address in contactAddresses) { addresses.Add(JObject.Parse(

我试图用
JObject
数组填充对象
details
。这些信息可在
联系人地址
中找到,这是一个
地址模型[]

使用以下代码,我得到以下错误:

Newtonsoft.Json.JsonReaderException:解析值后遇到意外字符

JArray addresses = new JArray();

foreach (AddressModel address in contactAddresses)
    {
        addresses.Add(JObject.Parse(
            @"{""street"":""" + address.Street +
            @"""city"":""" + address.City +
            @"""postalCode"":""" + address.PostalCode +
        @"""}"));
    }
    details.Add(new JProperty("addresses", addresses));

我做错了什么?

您缺少每个数据字段周围的右引号,以及它们之间的逗号。你需要这样的东西

addresses.Add(JObject.Parse(
            @"{""street"":""" + address.Street + "\", " +
            @"""city"":""" + address.City + "\", " + 
            @"""postalCode"":""" + address.PostalCode + 
        @"""}"));

似乎您的最终目标是最终得到一些表示地址列表的JSON。我知道您提到了JObject和JArray,但您认为实现很糟糕。这里有一个替代方案

string json = JsonConvert.SerializeObject(contactAddresses);
生成的
json
应如下所示(一旦格式化):


如果希望输出以不同的方式显示,可以将属性应用于
AddressModel
类的属性。。。我不习惯在C#中使用JSON,语法非常糟糕。谢谢!;)@Elfayer它不一定是丑陋的。您可以创建一个表示要序列化的数据的C类,然后使用
JsonConvert.SerializeObject
。那会干净得多。您可以为它重用AddressModel类。@mason用于读取部分,是的,但不用于数据。详细信息中的信息取决于联系人类型。因此,我别无选择,只能将所有可能的属性添加到
Details
类中,即使大多数属性保持为空。我更喜欢将“丑陋的部分”保留在后端代码中,而不是将无用的数据接收到前端部分。@ellayer因此创建不同的类型来表示不同的对象类型。你不必有难看的代码。事实上,最好不要同意,但我必须将此对象返回到前端。那么对于不同的类型,返回类型是什么?
[
    {"Street": "123 Mockingbird Lane", "City": "New York City", "PostalCode": "11111"},
    {"Street": "1600 Penn Ave", "City": "Washington DC", "PostalCode": "22222"},
    {"Street": "2400 University Dr", "City": "Fort Worth", "PostalCode": "33333"},
]