键入<type>,数据合同名称<contract name =“”>不是</contract> </type>

时间:2014-09-04 09:27:33

标签: c# wpf serialization catel

我在桌面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.

我还尝试了WarmingUp ViewModel中的SerializationFactory:

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

但没有改变。

有没有人有任何建议?我现在该怎么办?

由于 Saul Hidalgo。

2 个答案:

答案 0 :(得分:0)

看起来你(或Catel库)试图使用WCF DataContractSerializer将普通对象简单序列化为XML文件。这不是DataContractSerializer的设计目的 - 它主要用于将数据对象序列化为SOAP以通过WCF Web服务发送,并且需要复杂的配置。

对于简单的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);
}

答案 1 :(得分:0)

经过一番努力,我终于解决了它。

问题的产生是因为我有一个包含两种类型对象(都可序列化)的集合。我试图概括它创建一个“对象”的集合,当我需要使用它时,我将它投入使用。

好吧,序列化程序引擎找到了“对象”类型,当他试图序列化时,他发现它确实是一个BoilingModel。

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

我希望它可以帮助其他人解决同样的问题。

此致 索尔。