Walczę z deserializację tego co przysyła jeden program. Przy próbie deserializacji obiektu otrzymuję taki błąd:
System.Runtime.Serialization.SerializationException : Błąd w wierszu 1 w pozycji 2. Oczekiwany element „LightComponentOfDoor7RlNrhPW” z przestrzeni nazw „http://schemas.datacontract.org/2004/07/Test”.. Napotkano „Element” o nazwie „LightComponentOfDoor”, przestrzeń nazw „”.
XML otrzymuję mniej więcej taki:
<LightComponentOfDoor>
<Session>OperatorSession</Session>
<ID>424</ID>
<Description>Controller #1 Door #1 (01.01)</Description>
<Object>12</Object>
<Owner>423</Owner>
<item>
<key>
<string>DESCRIPTION2</string>
</key>
<value>
<SmartLinkDataValue>
<Value>Controller #1 Door #1</Value>
</SmartLinkDataValue>
</value>
</item>
<item>
<key>
<string>ELEVATORCAB</string>
</key>
<value>
<SmartLinkDataValue>
<Value>0</Value>
</SmartLinkDataValue>
</value>
</item>
</LightComponentOfDoor>
Tak wygląda obiekt:
[DataContract]
[KnownType("GetTypes")]
public class LightComponent<T> : ILightComponent
{
[DataMember(Name = "ID")]
public int Id { get; set; }
public int Owner { get; set; }
[DataMember(Name = "Object")]
public ObjectType Type { get; set; }
public string Description { get; set; }
private static Type[] GetTypes()
{
return new[] {typeof (LightComponent<T>)};
}
}
[DataContract]
public class Door
{
}
[DataContract]
public class Controller
{
}
Natomiast kod deserializujący:
using (var xmlReader = XmlReader.Create(new StringReader(xml)))
{
var serializer = new DataContractSerializer(typeof(LightComponent<Door>));
var obj = serializer.ReadObject(xmlReader);
}
Zastanawia mnie to "7RlNrhPW" w nazwie oczekiwanego typu. Ktoś się z tym spotkał?