C#シーケンス化されたオブジェクトをXML形式の文字列に変換


実習会社のもとの左側のメニューはjsを通じてajaxを行って1つのxmlのファイルを求めて1つのxmlの対象を得て、それからhtmlのファイルをつなぎます
1、C#    SQL,  DataTable  

2、  DataTable  ,    Dictionary,key     ,value               ,  ArrayList

3、    Dictionary,    key      ,         List,List           

4、       ,  xml,       aspx

秘密保持の必要性から、私は問題を抽象化して、このxmlは国家-省-都市で表現することができます
データベースから取り出したデータの差はそれほど大きくありません(これはマルチテーブルjoin後の結果セットです):
id
province
city
address
1
江蘇省
南京
nanjing
2
浙江省
杭州
hangzhou
3
浙江省
寧波
ningbo
最後に生成するxmlの長さは次のとおりです.


  
    
  
  
    
    
  
  

まず、クラスを定義します.
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using IAUOperation.db;
using System.Collections;
using System.Data.SqlClient;
using Operation.Web;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

[XmlRoot("country")]
public class Country
{
    [XmlAttribute]
    public string width;

    [XmlElement("province")]
    public List provinces;

}


[XmlRoot("province")]
public class Province
{
    [XmlAttribute]
    public string name;

    [XmlElement("city")]
    public List cities;

}


public class City
{
    [XmlAttribute]
    public string name;

    [XmlAttribute]
    public string address;
}


public class CityItem
{
    public string province;

    public string city;

    public string address;
}

なお、ここでメインメニューとサブメニューの対応関係を保存する場合は、Hashtableは使用できません.Hashtableは無秩序に格納されているため、メニューには順序が必要です
ここでは、コアコードの例を示します.
DataTable dt = dbBase.executeInternalQuery(strSQL);

HashSet hashSetMenus = new HashSet();


Dictionary provinceCity = new Dictionary();

List CityItemList = new List();

for (int i = 0; i < dt.Rows.Count; i++)
{
    string tmpProvince = dt.Rows[i]["province"].ToString();
    hashSetProvinces.Add(tmpProvince);

    CityItem cityItem = new SubMenuItem();
    cityItem.province = tmpProvince;
    cityItem.city = dt.Rows[i]["city"].ToString();
    cityItem.address = dt.Rows[i]["address"].ToString();
    CityItemList.Add(cityItem);
}

for (int i = 0; i < dt.Rows.Count; i++)
{

    //  
    string tmpProvince = dt.Rows[i]["province"].ToString();
    //  
    string tmpCity = dt.Rows[i]["city"].ToString();

    if (hashSetProvinces.Contains(tmpMainMenu))
    {
        if (!provinceCity.ContainsKey(tmpMainMenu))
        {
            ArrayList citylist = new ArrayList();
            citylist.Add(tmpSubMenu);
            provinceCity.Add(tmpProvince, citylist);
        }
        else
        {
            ArrayList temp = provinceCity[tmpProvince] as ArrayList;
            temp.Add(tmpCity);

        }
    }

}