3. 详细举例说明
这里用简单的城市,区域和街区作为例子,具体示范一下上面的规则。
[XmlRootAttribute("MyCity", Namespace = "abc.abc", IsNullable = false)]
public class City
{
[XmlAttribute("CityName")]
public string Name
{
get;
set;
}
[XmlAttribute("CityId")]
public string Id
{
get;
set;
}
[XmlArrayAttribute("Areas")]
public Area[] Areas
{
get;
set;
}
}
[XmlRootAttribute("MyArea")]
public class Area
{
[XmlAttribute("AreaName")]
public string Name
{
get;
set;
}
[XmlElementAttribute("AreaId", IsNullable = false)]
public string Id
{
get;
set;
}
[XmlElementAttribute("Street", IsNullable = false)]
public string[] Streets
{
get;
set;
}
}
根据以上类型,我们mock一些数据,然后用步骤1给出的Util方法输出:
static void Main(string[] args)
{
Area area1 = new Area();
area1.Name = "Pudong";
area1.Id = "PD001";
area1.Streets = new string [] { "street 001", "street 002" };
Area area2 = new Area();
area2.Name = "Xuhui";
area2.Id = "XH002";
area2.Streets = new string [] { "street 003", "street 004" };
City city1 = new City();
city1.Name = "Shanghai";
city1.Id = "SH001";
city1.Areas = new Area[] { area1, area2 };
XmlSerializer.SaveToXml(@"C:tempXMLoutput003.xml", city1);
}
最终输出的XML为:
<?xml version="1.0" encoding="utf-8"?>
<MyCity xmlns:xsi="http://www.easck.com/2001/XMLSchema-instance"
xmlns:xsd="http://www.easck.com/2001/XMLSchema"
CityName="Shanghai" CityId="SH001" xmlns="abc.abc">
<Areas>
<Area AreaName="Pudong">
<AreaId>PD001</AreaId>
<Street>street 001</Street>
<Street>street 002</Street>
</Area>
<Area AreaName="Xuhui">
<AreaId>XH002</AreaId>
<Street>street 003</Street>
<Street>street 004</Street>
</Area>
</Areas>
</MyCity>
下面我们开始具体分析结果,其中包含一些很有用的结论和注意事项:
1. xml的版本,编码,以及命名空间xmlns:xsi,xmlns:xsd为Framework自动添加。
2. 因为我们用City对象作为根节点,所以根节点名称为我们定义的"MyCity"。
但是,注意!这里指的是用City自身直接做根节点,如果是City集合比如City[],此时,该名称失效,系统会自动生成名称ArrayOfCity作为根节点名称(ArrayOf+类名),或者我们手动指定名称,这个就是在给大家的SaveToXml()方法中,参数xmlRootName的作用。










