使用 DataContractSerializer 反序列化 xml 文件时遇到问题

Trouble deserialising xml file using DataContractSerializer

自从我使用 DataContractSerializer 以来已经有一段时间了,我在反序列化 xml 文件时遇到了一些麻烦。

<?xml version="1.0" encoding="utf-8"?> <SoftwareLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

我得到的错误是:

{"Error in line 1 position 117. Expecting element 'SoftwareLicense' from namespace 'http://schemas.datacontract.org/2004/07/Solentim.Modules.Licensing.Activation'.. Encountered 'Element' with name 'SoftwareLicense', namespace ''. "}

[DataContract(Name = "SoftwareLicense")]
public class SoftwareLicense : ISoftwareLicense
{
    ...
}

我试过指定命名空间,但也不起作用。

var serializer = new DataContractSerializer(typeof(SoftwareLicense));

using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
    using (var reader =
                XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas()))
    {
        return (SoftwareLicense) serializer.ReadObject(reader);
    }
}

最近更改了文件的命名空间,并向 class 添加了一个接口。我已经解决了所有其他问题,但我似乎无法解决这个问题。

我更喜欢使用 DatacontractSerializer,因为 class 现在具有接口属性并且 XMLSerializer 不会反序列化它

This answer可能会帮助您解决问题。

如果您更喜欢使用XmlSerializer。下面是简单的实现:

private T Deserialize<T>(string path) where T : class
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    T result = null;
    using (XmlReader reader = XmlReader.Create(path))
    {
       result = (T)serializer.Deserialize(reader);
    }
    return result;
}