C# DataContractSerializer SerializationException mit Enum setzen Sie im Objekt-Feld
Angesichts des folgenden code,
[DataContract]
public class TestClass
{
[DataMember]
public object _TestVariable;
public TestClass(object value)
{
_TestVariable = value;
}
public void Save()
{
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(new FileStream("test.tmp", FileMode.Create)))
{
DataContractSerializer ser = new DataContractSerializer(typeof(TestClass));
ser.WriteObject(writer, this);
}
}
}
public enum MyEnum
{
One,
Two,
Three
}
Warum scheitert es zu serialisieren, wenn _TestVariable
ist ein Enum-Wert?
new TestClass(1).Save(); //Works
new TestClass("asdfqwer").Save(); //Works
new TestClass(DateTime.UtcNow).Save(); //Works
new TestClass(MyEnum.One).Save(); //Fails
Ausnahme geworfen wird:
System.Runtime.Serialization.SerializationException : Type 'xxx.MyEnum' with data contract name 'xxx.MyEnum:http://schemas.datacontract.org/2004/07/Tests' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
- welches problem versuchen Sie zu lösen, indem Sie mit
object type
für _TestVariable, vielleicht könnten Sie erklären, das eigentliche problem. - Finden Sie die Antwort auf eine ähnliche Frage stackoverflow.com/a/8795410/52277
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden KnownTypeAttribute auf TestClass.
Eine weitere option, die Sie einsetzen konnte, um zu vermeiden, dass die KnownType Attribut alle über dem Platz ist zu verwenden, geben Sie den Abzug, um die Arbeit für Sie tun.
MyEnum ist nicht als serialisierbar markiert. Hinzufügen datacontractattribute aktivieren, um MyEnum Problem beheben sollte.
[DataContract]
zu MyEnum