汎用データ エンティティのコレクションをシリアル化および逆シリアル化することによってデータ オブジェクトを永続化する方法。
通常、データベースを使用するときに、データ エンティティ オブジェクトをデータベースに挿入したくないという問題に遭遇することがよくあります。それらを永続化したい場合は、それを
XML 文字列にシリアル化し、それを他の場所に保存できます。文字列は、保存したい場所に保存できます。たとえば、asp.net の ViewState、Cookie、キャッシュなどです。
まず、データ エンティティ クラスを定義します。
クラスエンティティ
{
publicEntity()
{}
プライベート int ID;
パブリック整数ID
{
得る
{
ID を返します。
}
セット
{
ID = 値;
}
}
プライベート文字列名。
パブリック文字列名
{
得る
{
名前を返します。
}
セット
{
名前 = 値;
}
価格
;
パブリックダブルプライス
{
得る
{
返品価格。
}
セット
{
価格 = 価値;
}
}
}
したがって、これを List<Entity> オブジェクトに挿入します。
List<Entity> list = new List<Entity>();
エンティティ obj = 新しい Entity();
obj.Id = 1;
obj.Name = "テスト";
obj.Price = 3.23;
list.Add(obj);
このようにして、List<Entity> オブジェクトが正常に作成されました。
public static string Serialize<BusinessObject>(List<BusinessObject> GenericList)
としてシリアル化してみましょう。
{
XmlDocument 結果 = 新しい XmlDocument();
result.LoadXml("<ルート></ルート>");
foreach (GenericList 内の BusinessObject obj)
{
XmlElement 項目 = result.CreateElement("項目");
PropertyInfo[] プロパティ = obj.GetType().GetProperties();
foreach (プロパティ内の PropertyInfo プロパティ)
{
if (property.GetValue(obj, null) != null)
{
XmlElement 要素 = result.CreateElement(property.Name);
element.SetAttribute("タイプ", property.PropertyType.Name);
element.InnerText = property.GetValue(obj, null).ToString();
item.AppendChild(要素);
}
}
result.DocumentElement.AppendChild(Item);
}
結果を返します。InnerXml;
}
次に、このメソッドを
string str = Serialize<Entity>(list); と呼びます。
生成された XML ファイルは次のとおりです:
<ルート
>
<アイテム>
<Id Type="Int32">1</Id>
<Name Type="String">テスト</Name>
<Price Type="Double">3.23</Price>
</アイテム>
</ルート>
次に、上記で生成された XML ファイルを逆シリアル化し、List<Entity> オブジェクトを生成します。
public static List<BusinessObject> Deserialize<BusinessObject>(string XmlStr)
{
List<BusinessObject> 結果 = new List<BusinessObject>();
XmlDocument XmlDoc = 新しい XmlDocument();
XmlDoc.LoadXml(XmlStr);
foreach (XmlDoc.GetElementsByTagName("Root").Item(0).ChildNodes の XmlNode ItemNode)
{
BusinessObject item = Activator.CreateInstance<BusinessObject>();
PropertyInfo[] プロパティ = typeof(BusinessObject).GetProperties();
foreach (ItemNode.ChildNodes の XmlNode propertyNode)
{
文字列名 = propertyNode.Name;
文字列型 = propertyNode.Attributes["Type"].Value;
文字列値 = propertyNode.InnerXml;
foreach (プロパティ内の PropertyInfo プロパティ)
{
if (名前 == プロパティ.名前)
{
property.SetValue(item,Convert.ChangeType(value,property.PropertyType), null);
}
}
}
result.Add(項目);
}
結果を返します。
}
次に、このメソッドを呼び出します。
List<Entity> list = Deserialize<Entity>(str);
終わりました。
この記事では、List<> オブジェクトをシリアル化する簡単な方法のみを紹介します。独自の状況に応じて使用してください。
http://www.cnblogs.com/kchen/archive/2006/11/04/550382.html