2013-09-25 4 views
0

Я вижу XmlException, возникающий из вывода всякий раз, когда JSON, десериализованный, содержит символы типа '@'. В конце концов, он все еще успешно десериализует его, но он меня не знает, что не так. Это также замедляет отладку, так как многие ответы json отражают эти символы.Специальные символы, XmlException и DataContractJsonSerializer

Кода для воспроизведения:

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.XmlException' произошел в System.Xml.ni.dll и не был обработан до управляемого/родной границы

Я что-то упустил? Я бы не хотел, чтобы любой поиск & заменил перед десериализацией, если это возможно.

Редактировать

Если я запускаю тот же код в консольном приложении в .NET 4.5, я не вижу, что это исключение происходит.

ответ

0

Можете ли вы попробовать обернуть вызов JsonHelper.Deserialize ... в попытке поймать и проверить innerexception, чтобы узнать, есть ли больше деталей. Кроме того, вы можете попытаться настроить доступ к классу JsonObject для публики и посмотреть, помогает ли это.

+0

Спасибо за ответ. Установка аксессора не имеет никакого эффекта, просто пропустила его, когда я построил простой репрограмм из фактического сотона. И исключение, это поймано где-то внутри DataContractJsonSerializer, и я не могу удержаться на нем. –

0

Начато использование json.NET, у которого нет проблем с обработкой таких ответов.