我们有两个控制台应用程序,称为“前端”(FE)和“后端”(BE),
由WCF连接。我需要一个抽象类和一些
BE 中的继承类,在运行时我已经从其中之一实例化了一个对象
Activator 继承的类。
每当我想返回实例化对象时,都会出现与
连载。这是我的简化代码
[DataContract]
public abstract class License
{
[DataMember]
public int ManagedObjectCount { get; set; }
}
[DataContract]
public class LicenseMay2018 : License
{
public Frontend.DataTypes.License GetLicenseInfo(xml xml)
{
Frontend.DataTypes.LicenseMay2018 licenseVerified;
var licXML = nodeData[0].InnerText;
//Deserialize license
XmlSerializer _serializer = new XmlSerializer(typeof(LicenseMay2018));
using (StringReader _reader = new StringReader(licXML))
{
licenseVerified = (Frontend.DataTypes.LicenseMay2018)_serializer.Deserialize(_reader);
}
}
}
[DataContract]
public class LicenseApril2018 : License
{
}
在 BE 方面,我按抽象类的类型返回,期望返回继承的类,Activator 和实例化每件事都很好。唯一的问题是在方法的最后,当它要返回FE时,似乎要序列化并返回
public Frontend.DataTypes.License ActivateLicense(int LicenseFileId)
{
// create in instance of inehrited class, no matter licensemay2018 or april2018
string assemblyName = "NMS.Common";
var className = GetLicenseType(nodeVersion[0].InnerText);
// exaple : className = licensemay2018
var handle = Activator.CreateInstance(assemblyName, className);
var instance = (Frontend.DataTypes.License)handle.Unwrap();
return instance.GetLicenseInfo(xmlDoc);
}
在运行时我不知道确切的类型,所以我按父类的类型创建了实例,它可以工作并创建了确切的对象
返回时会出现这个错误
尝试序列化参数http://tempuri.org/:ActivateLicenseResult 时出错 。InnerException 消息是 'Type 'NMS.Frontend.DataTypes.LicenseMay2018' with data contract name 'LicenseMay2018: http://schemas.datacontract.org/2004/07/NMS.Frontend.DataTypes ' 不是预期的。如果您正在使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。有关更多详细信息,请参阅 InnerException。
我不知道这些来自哪里:http : //tempuri.org和http://schemas.datacontract.org/2004/07 ??
小唯快跑啊
相关分类