2016-04-29 36 views
0

我正嘗試重新創建JSON:錯誤創建一個J Object中包括數組時

{ 
    "auth": { 
     "identity": { 
      "methods": [ 
       "password" 
      ], 
      "password": { 
       "user": { 
        "id": "90551bd1bcf6474dba09c96617a33638", 
        "password": "hoeIX1.i-.M]wiu9" 
       } 
      } 
     }, 
     "scope": { 
      "project": { 
       "id": "2440e4fa1725452cb2e14506cb5d63ec" 
      } 
     } 
    } 
} 

眼下I'm這樣做:

JObject auth = new JObject(
    new JProperty("auth", new JObject(
     new JProperty("identity", new JObject(
      new JProperty("method",JArray.Parse("[\"password\"]")), 
      new JProperty("password", new JObject(
       new JProperty("user", new JObject(
        new JProperty("id", JValue.CreateString(identityWithProject.Username)), 
        new JProperty("password", JValue.CreateString(identityWithProject.ProjectName))))))), 
     new JProperty("scope", new JObject(
      new JProperty("project", new JObject(
       new JProperty("id", JValue.CreateString(identityWithProject.ProjectName)))))))))); 

我得到這個錯誤:

"Can not add Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JArray."

不工作的線路是:

new JProperty("method",JArray.Parse("[\"password\"]")) 

如果我刪除了JArray部分它工作正常,我怎麼能修復它,以便它與數組部分? 我發現的大多數例子都是一個JObjects數組,它不是這種情況。 謝謝!

+2

在這裏,您將極​​大地從使用一類具有你所需要的性能中受益,並序列化的情況下,類返回json。儘管您可以按照自己的方式進行操作,但它不可讀,並且在發生錯誤時更難調試。除此之外,您可以使用新的JProperty(「method」,新的JArray(new {「password」}))。 –

+0

我甚至沒有想過,我會試一試 – moondaisy

回答

3

它看起來像有一個錯位的),這個工程:

var auth = new JObject(
    new JProperty("auth", new JObject(
     new JProperty("identity", new JObject(
      new JProperty("methods", JArray.Parse("[\"password\"]")), 
      new JProperty("password", new JObject(
       new JProperty("user", new JObject(
        new JProperty("id", JValue.CreateString(identityWithProject.Username)), 
        new JProperty("password", JValue.CreateString(identityWithProject.ProjectName)))))))), // 8 x ')' 
     new JProperty("scope", new JObject(
      new JProperty("project", new JObject(
       new JProperty("id", JValue.CreateString(identityWithProject.ProjectName))))))))); // 9 x ')' 

我剛搬到一個)從最後一行到第三從最後一行。

此外,物業"method"應該被命名爲"methods"如果它打算加快你的樣本。此外,創建JProperties時確實沒有理由使用JValue.CreateString,並且@Steven Brickner指出,可以將JArray.Parse("[\"password\"]")簡化爲new JArray("password")

這可能是更冗長,但可讀性的原因,這裏是完全縮進:

var auth = 
    new JObject(
     new JProperty("auth", 
      new JObject(
       new JProperty("identity", 
        new JObject(
         new JProperty("methods", new JArray("password")), 
         new JProperty("password", 
          new JObject(
           new JProperty("user", 
            new JObject(
             new JProperty("id", identityWithProject.Username), 
             new JProperty("password", identityWithProject.ProjectName) 
            ) 
           ) 
          ) 
         ) 
        ) 
       ), 
       new JProperty("scope", 
        new JObject(
         new JProperty("project", 
          new JObject(
           new JProperty("id", identityWithProject.ProjectName) 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ); 
+0

謝謝!我以前嘗試過使用'新的JArray',但它不起作用,所以我嘗試了所有其他可能的方式而沒有意識到錯位'(' – moondaisy

相關問題