将图形 API 转换为 XML



我在转换一串json facebook图形api时遇到问题,我使用了facebook C#和 json.Net。

但在转换时它会返回此错误:名称不能以"0"字符开头,十六进制值0x30。

这是代码:

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

如下所示的 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 版本等。

正如keyr所说,问题出在那些具有数字名称的JSON属性上。在 XML 中,名称可以包含数字字符,但不能以 XML 开头: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。这是一个特定的要求吗?

相关内容

  • 没有找到相关文章

最新更新