Ошибка при десериализации отсутствующего элемента
Я использую NetDataContractSerializer
для сериализации / десериализации. Я сериализовал словарь, который содержит объект Employee
Теперь я изменил объект Employee и включил логическое поле IsManager. Итак, после десериализации выше xml я хочу, чтобы объект Employee с IsManger имел значение false.
Но я получаю ошибку ниже при десериализации XML.
Ошибка в строке 1 позиции 1676. "Элемент" " x003C...." из пространства имен " http://schemas.datacontract.org/2004/07/.." не ожидается. Ожидается элемент ' x003C....'.
я пытался [DataMember(IsRequired = false)]
так же как [XmlElement(IsNullable=true)]
атрибут для поля IsManager, но он не решил проблему.
Класс сотрудника
public Class Employee
{
public string FirstName{get;set;}
public string LastName{get;set;}
public bool IsManager{get;set;}
}
Класс сотрудника сериализуется в словаре, чтобы прочитать его из словаря (xml). Я использую приведенный ниже код
internal static IDictionary<TKey, TValue> DeserializeData<TKey, TValue>(string xml) where TValue : class
{
if (xml == null || xml.Equals(string.Empty))
{
return null;
}
IDictionary<TKey, TValue> dictionary = null;
var deserializer = new NetDataContractSerializer
{
AssemblyFormat = FormatterAssemblyStyle.Simple
};
var sr = new StringReader(xml);
using (XmlReader reader = XmlReader.Create(sr))
{
try
{
dictionary = deserializer.ReadObject(reader) as IDictionary<TKey, TValue>;
}
catch (Exception e)
{
Trace.WriteLine(
string.Format(
CultureInfo.InvariantCulture, "Exception during de-serialization of data: {0}", e.Message));
}
}
return dictionary;
}