Я рефакторинг своей XML-сериализации, и решил, что я попробую DataContractSerializer.Все идет гладко, пока не нужно сериализовать этот класс:
using System;
using System.Runtime.Serialization;
namespace VDB_Sync.Model
{
[DataContract(Name="Konstant")]
public class Konstant : DataFelt
{
[DataMember]
private MySqlDbType mydataType;
[DataMember]
private object value;
public Konstant(string navn, MySqlDbType dataType, object value)
: base(navn, dataType, "*Konstant", false, false)
{
//this.navn = navn;
this.mydataType = dataType;
this.value = value;
if (navn.Contains("*Løbenummer"))
{
navn = "*Konstant: " + Convert.ToString(value);
}
}
public object Value
{
get
{
return value;
}
}
}
}
Это дает мне это:
Тип 'VDB_Sync.Model.Konstant 'с именем контракта данных' Konstant: http://schemas.datacontract.org/2004/07/VDB_Sync.Model' не ожидается.Попробуйте использовать DataContractResolver или добавить любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, передаваемых в DataContractSerializer.
* Помощь, которую я нашел до сих пор, указывает на коллекции и типы.У меня есть enum (MySqlDbType) в моем классе - но получаю это: я даже получаю ту же ошибку, когда у меня вообще нет объявленных DataMembers: -x Итак - что здесь происходит?Чего мне не хватает?
для справки, вот как я его сериализовал, VDB_SessionController был корневым: *
public void GemKonfig(VDB_SessionController session)
{
var settings = new XmlWriterSettings()
{
Indent = true,
IndentChars = "\t"
};
var writer = XmlWriter.Create(defaultFile, settings);
DataContractSerializer ser =
new DataContractSerializer(typeof(VDB_SessionController));
ser.WriteObject(writer, session);
writer.Close();
}