deserialisieren Wenn die Datacontract Serializer verwenden, schlägt er den Id
Wert, wie in der folgenden Probe deserialisieren:Datacontract nicht 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\"");
}
}
}
Ich vermute, es mit den Referenzintegritätsfunktionen zu tun ist, aber Ich habe nur eine Option gefunden, um das zu deaktivieren (auf dem DataContractSerializer), und es hat das Ergebnis nicht beeinflusst.
Ich kann den Namen des Feldes Id
nicht ändern, da es sich um eine API eines Drittanbieters handelt. Wie kann ich also auf diesen Wert zugreifen?
Dieser Code 'ReadObject (Leser) als ValidationResult' gilt als schlechte Form. Da Sie wissen, dass es immer ein 'ValidationResult' sein wird, sollten Sie einen expliziten Cast verwenden. –