2015-10-28 46 views
1

我试图用JObject的数组填充对象details。这些信息可在contactAddresses这是一个AddressModel[]如何创建JObject的JArray?

蒙山下面的代码,我得到以下错误:

Newtonsoft.Json.JsonReaderException : After parsing a value an unexpected character was encountered

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)); 

我在做什么错?

回答

2

您错过了每个数据字段的结尾引号以及它们之间的逗号。你需要类似的东西;

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

灌装愚蠢...我不习惯在C#中使用JSON,语法相当不错。谢谢 ! ;) – Elfayer

+0

@Elfayer它不一定是丑陋的。你可以创建一个代表你想要序列化的数据的C#类,然后使用'JsonConvert.SerializeObject'。它会更干净。您可能可以重用您的AddressModel类。 – mason

+0

@mason对于阅读部分,是的,但不是数据。 “details”中的信息将取决于联系人类型。所以我不得不将所有可能的属性添加到'Details'类,即使大多数属性都是空的。我更愿意将“不好的部分”保留在后端代码中,而不是将无用的数据接收到前端部分。 – Elfayer

0

看起来像你的最终目标是结束一些代表地址列表的JSON。我知道你提到了JObject和JArray,但你认为实现很丑陋。这是另一种选择。

string json = JsonConvert.SerializeObject(contactAddresses); 

产生的json应该像这样(格式化后):

[ 
    {"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"}, 
] 

您可以将属性添加到AddressModel类的属性,如果你想输出出现现在不同