2012-12-02 15 views
2

我無法轉換json facebook圖形API的字符串,我使用了Facebook C#和json.Net。將圖形API轉換爲xml

但在轉換時它返回此錯誤:名稱不能以'0'字符開頭,十六進制值爲0x30。

這是代碼:

dynamic result = await _fb.GetTaskAsync ("me/feed"); 
FBxml JsonConvert.DeserializeXNode string = (result.ToString()). ToString(); 
+0

你可以發佈你試圖反序列化的JSON嗎? –

+0

Normal是由api facebook生成的json,這裏是我的代碼生成的一個例子:http://jsfiddle.net/btripoloni/PaLC2/ –

回答

0

它看起來像有與下面提及的JSON字符串的一部分的問題

"story_tags": { 
      "0": [{ 
       "id": "100000866891334", 
       "name": "Bruno Tripoloni", 
       "offset": 0, 
       "length": 15, 
       "type": "user"}] 
     }, 

的Json不能創建(從你的鏈接http://jsfiddle.net/btripoloni/PaLC2/拍攝)類以'0'等數值開始。嘗試使用鏈接http://json2csharp.com/創建課程,你會得到一個想法。

要解決此問題,您可以創建一個動態對象並遍歷每個屬性,或者創建一個JsonConverter並將代碼寫入ReadJson以將「0」轉換爲有意義的名稱。可能是這可以幫助你http://blog.maskalik.com/asp-net/json-net-implement-custom-serialization

如果這不是你的問題,然後更新與FBxml類結構,調用堆棧的異常(從哪個JSON代碼行引發異常),Json版本等

0

正如keyr所說,問題是與那些具有數字名稱的JSON屬性。在XML名稱中可以包含數字字符,但不能以1開頭:XML(請參閱格式良好和錯誤處理部分)。

我的想法是遞歸解析與JSON.Net的JSON,取代的是有數字名稱的屬性:

var jsonObject = JObject.Parse(json); 

foreach (var obj in jsonObject) 
{ 
    Process(obj.Value); 
} 

XDocument document = JsonConvert.DeserializeXNode(jsonObject.ToString()); 

.... 

private static void Process(JToken jToken) 
{ 
    if (jToken.Type == JTokenType.Property) 
    { 
     JProperty property = jToken as JProperty; 
     int value; 

     if (int.TryParse(property.Name, out value)) 
     { 
      JToken token = new JProperty("_" + property.Name, property.Value); 
      jToken.Replace(token); 
     } 
    } 

    if (jToken.HasValues) 
    { 
     //foreach won't work here as the call to jToken.Replace(token) above 
     //results in the collection modifed error. 
     for(int i = 0; i < jToken.Values().Count(); i++) 
     { 
      JToken obj = jToken.Values().ElementAt(i); 
      Process(obj); 
     } 
    } 
} 

這似乎運作良好,前綴數字名稱與_。在這一行:

XDocument document = JsonConvert.DeserializeXNode(jsonObject.ToString()); 

它崩潰了,說錯誤,表示無效/未正確形成的XML已創建。我沒有與我的實際錯誤,但你可以運行上面的代碼來複制它。

我想從這裏開始,您可能需要重新審視將JSON轉換爲XML。這是一個特定的要求嗎?