2

json facebook グラフ api の文字列の変換に問題があります。facebook C# と json.Net を使用しました。

しかし、変換時に次のエラーが返されます:名前は文字 '0' で始めることはできません。16 進値は 0x30 です。

これはコードです:

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

2 に答える 2

0

keyr が言うように、問題は数値名を持つ JSON プロパティにあります。XML では、名前に数字を含めることはできますが、先頭をXMLにすることはできません(整形式とエラー処理のセクションを参照してください)。

私のアイデアは、JSON を JSON.Net で再帰的に解析し、数値名を持つプロパティを置き換えることでした。

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 に変換することを再検討する必要があると思います。これは特定の要件ですか?

于 2012-12-03T20:14:31.630 に答える
0

以下に示すように、json文字列の一部に問題があるようです(リンクhttp://jsfiddle.net/btripoloni/PaLC2/から取得)

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

Json は、「0」などの数値で始まるクラスを作成できません。リンクhttp://json2csharp.com/を使用してクラスを作成してみてください。

この問題を解決するには、動的オブジェクトを作成して各プロパティを調べるか、 を作成しJsonConverterてコードを記述しReadJson、「0」を意味のある名前に変換します。これはあなたに役立つかもしれませんhttp://blog.maskalik.com/asp-net/json-net-implement-custom-serialization

これが問題でない場合は、FBxml のクラス構造、例外の呼び出しスタック (json コードのどの行から例外がスローされているか)、Json バージョンなどの詳細情報で質問を更新してください。

于 2012-12-03T10:12:03.583 に答える