Nav*_*ave 5 c# xml serialization
我有以下xml文件.
<a>
<b>
<c>val1</c>
<d>val2</d>
</b>
<b>
<c>val3</c>
<d>val4</d>
</b>
<a>
Run Code Online (Sandbox Code Playgroud)
我想将它反序列化为一个类,我想用创建的类的对象访问它们.我正在使用C#.我能够反序列化并将值传递给类' a'(<a>标记)的对象.但是如何<b>从这个对象中获取值呢?我做了以下编码:
[Serializable()]
[XmlRoot("a")]
public class a
{
[XmlArray("a")]
[XmlArrayItem("b", typeof(b))]
public b[] bb{ get; set; }
}
[Serializable()]
public class b
{
[XmlElement("c")]
public string c{ get; set; }
[XmlElement("d")]
public string d{ get; set; }
}
class Program
{
static void Main(string[] args)
{
a i = null;
string path = "test.xml";
XmlSerializer serializer = new XmlSerializer(typeof(a));
StreamReader reader = new StreamReader(path);
i = (a)serializer.Deserialize(reader);
reader.Close();
//i want to print all b tags here
Console.Read();
}
}
为此,您可以进行以下更改
public class a
{
[XmlElement("b")]
public b[] bb{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通过XmlElement在数组上使用该属性,您实际上是在告诉序列化程序,数组元素应该序列化/反序列化为当前元素的直接子元素.
这是一个工作示例,我将XML放在一个字符串中只是为了使示例自包含.
using System;
using System.IO;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
@"<a>
<b>
<c>val1</c>
<d>val2</d>
</b>
<b>
<c>val3</c>
<d>val4</d>
</b>
</a>";
XmlSerializer xs = new XmlSerializer(typeof(a));
a i = (a)xs.Deserialize(new StringReader(xml));
if (i != null && i.bb != null && i.bb.Length > 0)
{
Console.WriteLine(i.bb[0].c);
}
else
{
Console.WriteLine("Something went wrong!");
}
Console.ReadKey();
}
}
[XmlRoot("a")]
public class a
{
[XmlElement("b")]
public b[] bb { get; set; }
}
public class b
{
[XmlElement("c")]
public string c { get; set; }
[XmlElement("d")]
public string d { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |