Ho un problema con DataContractSerializer
. Lo uso per creare istanze di classi da XML restituite dal servizio Web ASP.NET. Ma in realtà la fonte dei dati non è importante qui. Per rendere l'intero caso più facile da eseguire il debug, ho creato un semplice progetto di test con solo la serializzazione e il problema si verifica ancora.Alcune proprietà non vengono deserializzate utilizzando DataContractSerializer
Ecco il mio 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>
La classe che sto cercando di deserializzare XML:
[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; }
}
E il mio serializzazione classe helper: codice
public static class SerializationHelper<T>
{
private static DataContractSerializer _serializer = new DataContractSerializer(typeof(T));
public static T Deserialize(Stream source)
{
return (T)_serializer.ReadObject(source);
}
}
di prova:
// 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);
}
}
Dopo aver impostato brakepoint alla fine del metodo vedo seguente:
Come si può vedere, sia AverageExecutionTime
e InitialCount
non sono deserializzati e hanno int
valore predefinito. Dovrebbero essere impostati su 43
e 1
, perché questi valori sono nell'XML.
È ancora più strano per me che la proprietà UserCount
sia eseguita correttamente, ma in realtà non differisce affatto da quelle che non funzionano affatto. L'unica cosa è diversa è il nome dell'elemento.
Eventuali duplicati http://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer?rq=1 –