反序列化缺少的元素时出错

时间:2013-09-10 13:10:36

标签: c# serialization xml-serialization xml-deserialization netdatacontractserializer

我正在使用NetDataContractSerializer进行序列化/反序列化。 我已经序列化了包含Employee对象的字典

现在我已经更改了Employee对象并包含了布尔字段IsManager 因此,在对xml进行反序列化之后,我希望将带有IsManger的Employee对象作为false值。
但是在反序列化xml时我遇到了错误。

  

第1行位置1676出错。来自命名空间的'Element'' x003C ....'   “http://schemas.datacontract.org/2004/07/ ..”不是预期的。   期待元素' x003C ....'。

我为IsManager字段尝试了[DataMember(IsRequired = false)]以及[XmlElement(IsNullable=true)]属性,但它没有解决问题。

员工类

public Class Employee
{
public string FirstName{get;set;}
public string LastName{get;set;}
public bool IsManager{get;set;}
}

在字典中序列化Employee类以从字典(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;
        }

0 个答案:

没有答案