Je vois XmlException se produire à partir de la sortie chaque fois que le fichier JSON désérialisé contient des caractères tels que '@'. En fin de compte, il le désérialise toujours avec succès, mais cela ne me permet pas de savoir ce qui ne va pas. Il ralentit également beaucoup le débogage car beaucoup de réponses json contais ces caractères.Caractères spéciaux, XmlException et DataContractJsonSerializer
Code pour reproduire:
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.
}
Une exception de type 'System.Xml.XmlException' a eu lieu dans System.Xml.ni.dll et n'a pas été traitée avant une frontière gérée/native
Ai-je raté quelque chose? Je ne voudrais pas faire de recherche & remplacer avant de désérialiser, si possible.
Modifier
Si je lance le même code dans une application console .NET 4.5, je ne vois pas cette exception qui se passe.
Merci pour la réponse. Le réglage de l'accesseur n'a aucun effet, juste raté quand j'ai construit un simple repro à partir du soluton réel. Et l'exception, il est pris quelque part dans le DataContractJsonSerializer et je ne peux pas me retenir. –