1

我在桌面 WPF 应用程序中使用 Catel 框架,当我尝试将模型保存到文件时,我收到以下错误。

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);

但没有任何改变。

有人有什么建议吗?此时我能做什么?

谢谢索尔·伊达尔戈。

4

2 回答 2

0

看起来您(或 Catel 库)以某种方式尝试使用 WCFDataContractSerializer将普通对象简单地序列化为 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);
}
于 2014-09-04T10:10:24.790 回答
0

经过一番工作,我终于解决了。

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

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

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

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

问候扫罗。

于 2014-09-18T22:02:40.010 回答