键入<;类型>;数据合约名称<;合同名称>;不应为

本文关键字:gt lt 合同 类型 数据 键入 | 更新日期: 2023-09-27 18:20:33

我在Desktop WPF应用程序中使用Catel Framework,当我试图将模型保存到文件中时,会出现以下错误。

Type 'GeoChemicalFuncsCS.Core.Models.BoilingModel' with data contract name 'BoilingModel:http://schemas.datacontract.org/2004/07/GeoChemicalFuncsCS.Core.Models' 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.

我尝试将KnownType和ServiceKnownType标记添加到模型中,但我得到了:

KnownType could not be found.

ServiceKnownType could not be found.

我还尝试了在ViewModel:中预热SerializationFactory

var typesToWarmup = new Type[] { typeof(BoilingModel) };
SerializationFactory.GetXmlSerializer().Warmup(typesToWarmup);

但一切都没有改变。

有人有什么建议吗?在这一点上我能做什么?

谢谢索尔·伊达尔戈。

键入<;类型>;数据合约名称<;合同名称>;不应为

看起来您(或Catel库)正试图以某种方式使用WCF DataContractSerializer将普通对象简单序列化为XML文件。这不是DataContractSerializer的设计目的——它基本上是为了将数据对象序列化为要通过WCF web服务发送的SOAP而设计的,并且需要复杂的配置。

对于简单的XML序列化,请使用[Serializable]对要序列化的类/结构进行注释,然后使用System.Xml.Serialization.XmlSerializer

示例(未测试):

var boilingModelObj = new BoilingModel();
// ... fill object with data ...
var serializer = new XmlSerializer(typeof(BoilingModel));
using (var writer = new StreamWriter("boilingmodel.xml"))
{
    serializer.Serialize(writer, boilingModelObj);
}

经过一番努力,我终于解决了这个问题。

问题的产生是因为我有一个包含2种类型的对象(都是可序列化的)的集合。我试图通过创建一个"对象"集合来概括它,当我需要使用它时,我会投射它

好吧,序列化程序引擎找到了类型"object",当他尝试序列化时,他发现它实际上是一个BoileingModel。

解决方案只是做了一个接口,现在两个可序列化类型都实现了该接口。

我希望它能帮助其他有同样问题的人。

问候索尔。