使用 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;
}
自从我使用 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;
}