特殊字符、XmlException 和 DataContractJsonSerializer
本文关键字:DataContractJsonSerializer XmlException 特殊字符 | 更新日期: 2023-09-27 18:32:51
每当被反序列化的 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 中发生类型为"System.Xml.XmlException"的异常.dll并且在托管/本机边界之前未处理
我错过了什么吗?如果可能的话,我不想在反序列化之前进行任何搜索和替换。
编辑
如果我在 .NET 4.5 控制台应用中运行相同的代码,则看不到此异常发生。
你能尝试包装对 JsonHelper.Deserialize...在尝试捕获并检查内部异常以查看是否有更多详细信息。 此外,您可以尝试将 JsonObject 类的访问器设置为 public,看看是否有帮助。
开始使用 json.NET,它在处理此类响应时没有任何问题。