已经有一段时间了,因为我使用了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);
}
}
最近更改了文件的命名空间,并在该类中添加了一个接口。我已经解决了所有其他问题,我似乎无法解决这个问题。
我更喜欢使用DatacontractSerializer,因为类现在具有接口属性,而XMLSerializer不会反序列化
答案 0 :(得分:2)
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;
}