Я использую Catel Framework в приложении WPF для рабочего стола, и когда я пытаюсь сохранить модель в файле, я получаю следующую ошибку.
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 SerializationFactory в ViewModel:
var typesToWarmup = new Type[] { typeof(BoilingModel) };
SerializationFactory.GetXmlSerializer().Warmup(typesToWarmup);
но ничего не изменилось.
Есть ли у кого-нибудь предложения? Что я могу сделать в этот момент?
Спасибо Саулу Идальго.
После некоторой работы я, наконец, решил это.
Проблема возникла из-за того, что у меня была коллекция, содержащая 2 типа объектов (обе сериализуемые). Я попытался обобщить его, создав коллекцию "объект", и когда мне нужно было использовать его, я его бросил.
Ну, механизм serializer нашел тип "объект", и когда он попытался сериализоваться, он обнаружил, что это действительно BoilingModel.
Решение просто выполняло интерфейс, и теперь оба сериализуемых типа реализуют этот интерфейс.
Надеюсь, это поможет кому-то другому с той же проблемой.
С уважением, Саул.
Похоже, что вы (или библиотека Catel) каким-то образом пытаетесь использовать WCF DataContractSerializer
для простой сериализации простого объекта в файл XML. Это не то, для чего предназначен DataContractSerializer
- он в основном предназначен для сериализации объектов данных в SOAP для отправки через веб-службу WCF и требует сложной конфигурации.
Для простой сериализации 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);
}
SerializationFactory
? Кажется, не является частью .NET Framework, но похоже, что он пытается использовать механизмы сериализации WCF, что, вероятно, не то, что вам нужно. Для простой XML-сериализации объектов вы должны использоватьSystem.Xml.Serialization.XmlSerializer
.