Ich habe eine Anwendung runnin .NETFramework 4.6.1, XML-Serialisierung für abstrakte Klassen und vererbte Typen, mit Ansatz fast identisch mit diesem XML Serialization and Inherited Types, und es funktioniert gut. Aber nach der Portierung der Anwendung auf UWP .NETCore habe ich eine seltsame Ausnahme festgestellt. Hier ist ein einfaches Beispiel, um es zu reproduzieren..NETCore XmlSerializer Fehler
public class ClassToSerialize
{
[XmlElement(Type = typeof(CustomSerializer<AnotherOne>))]
public AnotherOne anotherOne;
public ClassToSerialize()
{
}
}
public abstract class AnotherOne
{
public AnotherOne()
{
}
}
public class CustomSerializer<TType> : IXmlSerializable
{
public CustomSerializer()
{
}
public CustomSerializer(TType data)
{
m_data = data;
}
public static implicit operator CustomSerializer<TType>(TType data)
{
return data == null ? null : new CustomSerializer<TType>(data);
}
public static implicit operator TType(CustomSerializer<TType> obj)
{
return obj.m_data;
}
private TType m_data;
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
}
public void WriteXml(XmlWriter writer)
{
}
}
Und XmlSerializer zu schaffen für diese Art
XmlSerializer sr = new XmlSerializer(typeof(ClassToSerialize));
verursacht Ausnahme
System.InvalidOperationException: TestApp.AnotherOne, TestApp, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ist nicht zuweisbar von TestApp.CustomSerializer`1 [[TestApp.AndereOne, TestApp, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null]], TestApp, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null.
Derselbe Code funktioniert in. Netframework App. Haben sie etwas in .netcore geändert oder fehle ich etwas?
Haben Sie neu kompilieren auf UWP? Wenn nicht, dann müssen Sie auf UWP veröffentlichen und installieren. Verschiedene Versionen von Net Library-Offsets in Windows-DLLs sind unterschiedlich, sodass das Verschieben von ausführbaren Dateien nur funktioniert, wenn die Version von Net Libraries genau gleich ist. – jdweng
Ja, ich habe keine Bridge verwendet, das Projekt wurde als neues uniersales App-Projekt erstellt und mit .NETCore.UniversalWindowsPlatform 5.3.3-Paket kompiliert. – Alex