Mam problem z DataContractSerializer
. Używam go do tworzenia instancji klas z XML zwracanych przez ASP.NET Web Service. Ale w rzeczywistości źródło danych nie jest tutaj ważne. Aby ułatwić debugowanie całej sprawy, stworzyłem prosty projekt testowy z serializacją i problem nadal występuje.Niektóre właściwości nie są deserializowane przy użyciu DataContractSerializer
Tu jest mój XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<GetTestURL p1:type="MyApp.GetTestUrlInfo" xmlns:p1="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
<TestURL>http://bing.com</TestURL>
<UserCount p1:type="Edm.Int32">1</UserCount>
<InitialCount p1:type="Edm.Int32">1</InitialCount>
<AverageExecutionTime p1:type="Edm.Int32">43</AverageExecutionTime>
</GetTestURL>
Klasa Usiłuję deserializować XML do:
[DataContract(Name = "GetTestURL", Namespace = "http://schemas.microsoft.com/ado/2007/08/dataservices")]
public class TestInfo
{
[DataMember(Name = "TestURL")]
public Uri TestUri { get; private set; }
[DataMember(Name = "UserCount")]
public int UserCount { get; private set; }
[DataMember(Name = "InitialCount")]
public int InitialCount { get; private set; }
[DataMember(Name = "AverageExecutionTime")]
public int AverageExecutionTime { get; private set; }
}
A moja serializacji klasy pomocnika: Kod
public static class SerializationHelper<T>
{
private static DataContractSerializer _serializer = new DataContractSerializer(typeof(T));
public static T Deserialize(Stream source)
{
return (T)_serializer.ReadObject(source);
}
}
Test:
// Test program
public static void Main()
{
TestInfo info = null;
using (var stream = File.Open("Input.xml", FileMode.Open, FileAccess.Read))
{
info = SerializationHelper<TestInfo>.Deserialize(stream);
}
}
Po ustawieniu brakepoint na końcu metody widzę następujące:
Jak widać, zarówno AverageExecutionTime
i InitialCount
nie rozszeregować i mają int
wartość domyślną. Powinny ustawić na 43
i 1
, ponieważ te wartości są w formacie XML.
Jest mi jeszcze dziwniej, że własność UserCount
jest wykonywana prawidłowo, ale w rzeczywistości nie różni się ona od tych dwóch, które w ogóle nie działają. Różni się tylko nazwa elementu.
Możliwa powielać http://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer?rq=1 –