2011年2月6日日曜日

C#でXmlシリアライズ/デシリアライズするヘルパー


C#でpublicなプロパティやフィールドをXMLにダンプするモジュールを作りまりた。
コードが横に長くてすみません。めんどくさいのでそのままにします。

  1.    
  2. public static class XmlSerializeHelper    
  3. {  
  4.     private static readonly System.Text.Encoding _encoding = System.Text.Encoding.UTF8;  
  5.   
  6.     private static readonly XmlWriterSettings _xmlSettings = new XmlWriterSettings  
  7.     {  
  8.         Encoding = _encoding,  
  9.         NewLineChars = Environment.NewLine,  
  10.         NewLineHandling = NewLineHandling.None,  
  11.     };  
  12.   
  13.     public static XmlWriterSettings XmlSetting  
  14.     {  
  15.         get { return _xmlSettings; }  
  16.     }  
  17.   
  18.     public static void Save<T>( string path, T o )  
  19.     {  
  20.         using ( StreamWriter sw = new StreamWriter( path, false, _encoding ) )  
  21.         {  
  22.             Save<T>( sw, o );  
  23.         }  
  24.     }  
  25.   
  26.     public static void Save<T>( StreamWriter sw, T o )  
  27.     {  
  28.         using ( XmlWriter writer = XmlWriter.Create( sw, _xmlSettings ) )  
  29.         {  
  30.             XmlSerializer xmlSerializer = new XmlSerializer( typeof( T ) );  
  31.             xmlSerializer.Serialize( writer, o );  
  32.         }  
  33.     }  
  34.   
  35.     public static T Load<T>( string path )  
  36.     {  
  37.         using ( StreamReader sr = new StreamReader( path, _encoding ) )  
  38.         {  
  39.             return Load<T>( sr );  
  40.         }  
  41.     }  
  42.   
  43.     public static T Load<T>( StreamReader sr )  
  44.     {  
  45.         using ( XmlReader reader = XmlReader.Create( sr ) )  
  46.         {  
  47.             XmlSerializer xmlSerializer = new XmlSerializer( typeof( T ) );  
  48.             return ( T ) xmlSerializer.Deserialize( reader );  
  49.         }  
  50.     }  
  51.   
  52. }  

使い方はこんな具合。
  1. class SampleData  
  2. {  
  3.     public string Name { getset; }  
  4.     public int Value { getset; }  
  5. }  
  6.   
  7. class Program  
  8. {  
  9.     static void Main( string[] args )  
  10.     {  
  11.         List<SampleData> samples = new List<SampleData>{  
  12.             new SampleData  
  13.             {  
  14.                 Name = "Test1",  
  15.                 Value = 255  
  16.             },  
  17.             new SampleData  
  18.             {  
  19.                 Name = "Test2",  
  20.                 Value = 100  
  21.             }  
  22.         };  
  23.   
  24.         /// XMLファイルに書出し  
  25.         XmlSerializeHelper.Save<List<SampleData>>( "test.xml", samples );  
  26.   
  27.         /// XMLファイルから読込み  
  28.         List<SampleData> loadedSamples = XmlSerializeHelper.Load<List<SampleData>>( "test.xml" );  
  29.   
  30.         foreach ( SampleData data in loadedSamples )  
  31.         {  
  32.             Console.WriteLine( string.Format( "{0} {1}", data.Name, data.Value ) );  
  33.         }  
  34.   
  35.     }  
  36. }  

なおDictionaryをダンプするには、ISerializerインターフェイスを実装する独自クラスが必要。
こちらのサイトが参考になります。

0 件のコメント:

コメントを投稿