【问题标题】:Special characters, XmlException and DataContractJsonSerializer特殊字符,XmlException 和 DataContractJsonSerializer
【发布时间】:2013-09-25 17:18:50
【问题描述】:

每当被反序列化的 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 控制台应用程序中运行相同的代码,我不会看到此异常发生。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。设置访问器没有任何效果,只是在我从实际解决方案构建一个简单的复制时错过了它。还有一个例外,它被捕获在 DataContractJsonSerializer 内部的某个地方,我无法抓住它。
    【解决方案2】:

    开始使用json.NET,它在处理此类响应时没有任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 2012-09-24
      • 2011-05-17
      • 2016-12-08
      • 2011-05-03
      • 2019-09-05
      • 2017-02-27
      相关资源
      最近更新 更多