我有一個應用程序runnin .NETFramework 4.6.1,使用xml序列化抽象類和繼承類型,方法幾乎與此XML Serialization and Inherited Types相同,並且它工作得很好。但是將應用程序移植到UWP .NETCore之後,我遇到了一個奇怪的例外。這是一個簡單的例子來重現它。.NETCore XmlSerializer錯誤
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)
{
}
}
而對於這種類型的
XmlSerializer sr = new XmlSerializer(typeof(ClassToSerialize));
創建XmlSerializer的會導致異常
System.InvalidOperationException:TestApp.AnotherOne,TestApp,版本= 1.0.0.0,文化=中立,公鑰= null不能從TestApp.CustomSerializer`1 [[TestApp.AnotherOne,TestApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],TestApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null分配。
相同的代碼在.netframework應用程序中工作。他們在.netcore中改變了一些東西,還是我錯過了一些東西?
你重新編譯的UWP?如果沒有,那麼你需要在UWP上發佈和安裝。不同版本的Net Library偏移到windows dll中是不同的,所以只要移動的可執行文件不起作用,除非網絡庫的版本完全相同。 – jdweng
是的,我沒有使用橋接器,項目被重新創建爲一個新的應用程序項目,並使用.NETCore.UniversalWindowsPlatform 5.3.3包進行編譯。 – Alex