特殊字符,XmlException和DataContractJsonSerializer

时间:2013-09-25 17:18:50

标签: c# json windows-phone-8 datacontractjsonserializer

每当反序列化的JSON包含“@”等字符时,我都会看到输出中出现XmlException。最后,它仍然成功地反序列化它,但它让我不知道出了什么问题。它也会减慢调试速度,因为许多json响应包含这些字符。

重现的代码:

public static class JsonHelper
{     
    public static T Deserialize<T>(string json)
    {
        var obj = Activator.CreateInstance<T>();
        using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
        {
            var serializer = new DataContractJsonSerializer(obj.GetType());
            obj = (T)serializer.ReadObject(ms);
        }
        return obj;
    }
}

[DataContract]
class JsonObject
{
    [DataMember(Name = "@name")]
    public string Name { get; set; }
}


public partial class MainPage : PhoneApplicationPage
{
    private static string json = "{\"@name\":\"Something\"}";

    // Constructor
    public MainPage()
    {
        InitializeComponent();

        var obj = JsonHelper.Deserialize<JsonObject>(json);
        // obj.Name now contains "Something" as it should, but an XmlException has also happened.
    }
  

System.Xml.ni.dll中出现“System.Xml.XmlException”类型的异常,并且在托管/本地边界之前未处理

我错过了什么吗?如果可能的话,我不希望在反序列化之前进行任何搜索和替换。

修改

如果我在.NET 4.5控制台应用程序中运行相同的代码,我看不到发生此异常。

2 个答案:

答案 0 :(得分:0)

你可以尝试在try catch中包装对JsonHelper.Deserialize ...的调用,并检查innerexception以查看是否有更多细节。此外,您可以尝试将JsonObject类的访问器设置为public,并查看是否有帮助。

答案 1 :(得分:0)

开始使用json.NET处理这类响应没有任何问题。