标签:c xml xmlserializer xml-deserialization
我有这个示例XML文件,我需要反序列化:
<?xml version="1.0" encoding="utf-8"?>
<CollectionOfUnits>
<Unit>
<StringVar>TohleJeString</StringVar>
<Int32Var>24</Int32Var>
<DoubleVar>29.6</DoubleVar>
<DateTimeVar>17.11.1968</DateTimeVar>
<CharVar>c</CharVar>
</Unit>
<Unit>
<StringVar>TohleJeTakéString</StringVar>
<Int32Var>17</Int32Var>
<DoubleVar>5.9</DoubleVar>
<DateTimeVar>06.07.1415</DateTimeVar>
<CharVar>p</CharVar>
</Unit>
<Unit>
<StringVar>NoATohleTaké</StringVar>
<Int32Var>2</Int32Var>
<DoubleVar>78.5</DoubleVar>
<DateTimeVar>06.12.1774</DateTimeVar>
<CharVar>x</CharVar>
</Unit>
</CollectionOfUnits>
这是具有另一个类列表的根类:
[XmlRoot("CollectionOfUnits", IsNullable = false)]
public class XmlExampleCollectionOfUnits
{
[XmlArray("Unit")]
public List<XmlExampleBasicUnit> Units { get; set; }
public XmlExampleCollectionOfUnits(List<XmlExampleBasicUnit> units)
{
Units = units;
}
public XmlExampleCollectionOfUnits()
{
}
}
上面一节课的结构:
public class XmlExampleBasicUnit
{
public String StringVar { get; set; }
public Int32 Int32Var { get; set; }
public Double DoubleVar { get; set; }
public DateTime DateTimeVar { get; set; }
public Char CharVar { get; set; }
}
我在XmlSerializer的文档中使用这些函数,这些函数在调试期间很有用(这是从输出调用的地方):
private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)
{
Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);
}
private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
XmlAttribute attr = e.Attr;
Console.WriteLine("Unknown attribute " + attr.Name + "='" + attr.Value + "'");
}
这是输出:
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
我认为结构编码正确.我错过了一些名称吗?
解决方法:
这里有3个问题;
>你想要XmlElementAttribute,而不是XmlArrayAttribute,因为你只有一级嵌套,所以:[XmlElement(“Unit”)]
>您的日期无效为xml格式的日期;要么适当地格式化它们(ISO 8601,所以:1968-11-17等),或者使用字符串而不是DateTime并在之后手动转换它
> char类型不太合适 – 它本质上是一个整数类型;改用字符串
随着这些变化:它应该工作.
标签:c,xml,xmlserializer,xml-deserialization 来源: https://codeday.me/bug/20190607/1193857.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。