Lorsque vous utilisez le sérialiseur DataContract, il ne parvient pas à désérialiser la valeur Id
comme dans l'exemple ci-dessous:DataContract ne désérialiser Id DataMember
using System;
using System.Runtime.Serialization;
using System.Xml.Linq;
public class Program
{
private const string SAMPLE_VALIDATION_RESULT_XML = @" <ValidationResult>
<Message>The FooBar record has duplicate key values.</Message>
<Id>Microsoft.LightSwitch.EntityObject.DuplicateKey</Id>
<Target>http://localhost:55815/ApplicationData.svc/FooBar(0)</Target>
</ValidationResult>";
[DataContract(Name = "ValidationResult", Namespace = "")]
public class ValidationResult
{
[DataMember]
public string Message { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public string Target { get; set; }
}
public static void Main()
{
var doc = XDocument.Parse(SAMPLE_VALIDATION_RESULT_XML);
using (var reader = doc.CreateReader())
{
reader.MoveToContent();
var res = (new DataContractSerializer(typeof(ValidationResult))).ReadObject(reader) as ValidationResult;
Console.WriteLine($"res.Id = \"{res.Id}\", expected \"Microsoft.LightSwitch.EntityObject.DuplicateKey\"");
}
}
}
Je devine que c'est à voir avec les caractéristiques d'intégrité référentielle, mais J'ai seulement trouvé une option pour désactiver cela (sur le DataContractSerializer), et cela n'a pas affecté le résultat.
Je ne peux pas changer le nom du champ Id
, car il s'agit d'une API tierce, alors comment puis-je accéder à cette valeur?
Ce code 'ReadObject (lecteur) en tant que ValidationResult' est considéré comme incorrect. Puisque vous savez que ce sera toujours un 'ValidationResult', vous devriez utiliser une distribution explicite. –