当我试图反序列化XML时,我遇到了一个独特的问题。
该方法如下:
XmlSerializer serialize = new XmlSerializer(typeof(APIFile));
using(FileStream stream = new FileStream(file, FileMode.Open))
using(XmlReader reader= XmlReader.Create(stream))
{
APIFile model = serialize.Deserialize(reader) as APIFile;
Console.WriteLine(model.lSubmission.Select(m => m.Id));
}因此,当代码击中model时,我会收到一个错误声明:
xmlns="> Was not expected.There is an error in XML document (2,2).所构建的模型是通过-过去的特殊-- XML类来填充的。
我篡改了以下几行:
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]我修改了这句话:
但是错误仍然存在,我不完全确定原因。
<?xml version="1.0" encoding="UTF-8"?>
<CanvasResult>
<TotalPages>8</TotalPages>
<CurrentPage>1</CurrentPage>
<Submissions>
<Submission Id="5840790">
<Form Id="718013">
<Name>Proof of Delivery</Name>
<Status>retired</Status>
<Version>6</Version>
</Form>这是XML的第一个小部分,之后是一些更小的内容/部分,它将进一步构建。我的文档在文件中的任何地方都没有xmlns,是否可能读取器或XmlSerializer正在添加它?
发布于 2014-08-19 20:15:13
我设法把这个问题隔离到几个项目上:
&,这也导致了一个错误。我编写了一个简单的验证方法,在文件中运行,以验证XML并修复任何格式错误的标记或符号。
最终反序列化这些值的代码是:
public static void ParseToModel(string file)
{
if (string.IsNullOrEmpty(file))
throw new ArgumentNullException();
XmlSerializer serialize = new XmlSerializer(typeof(CanvasResult));
using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
using(XmlReader reader= XmlReader.Create(stream))
{
CanvasResult model = serialize.Deserialize(reader) as CanvasResult;
ParseToDatabase(model);
}
}调用该方法,该方法将接受文件参数,然后将内容与数据模型关联。最后,它调用一个名为ParseToDatabase的单独方法,该方法分解内容并放入数据库中的适当列中。
发布于 2014-08-15 22:59:45
我发现处理xml最简单的方法是使用XDocuments / XElements .
using(var reader = StreamReader(new FileStream(file, FileMode.Open)))
{
var data = reader.ReadToEnd();
var xml = new XElement(data);
//TODO: query xml with linq or whatever
}使用完整的文档和片段
https://stackoverflow.com/questions/25335194
复制相似问题