我無法轉換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();
我無法轉換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();
它看起來像有與下面提及的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版本等
正如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。這是一個特定的要求嗎?
你可以發佈你試圖反序列化的JSON嗎? –
Normal是由api facebook生成的json,這裏是我的代碼生成的一個例子:http://jsfiddle.net/btripoloni/PaLC2/ –