2012-02-21 8 views
0

Iは、そのパラメータとしてタイプobj1のオブジェクトを受け付ける方法、serializetoxmlを有する:C#の - パラメーターの任意のタイプを受け付ける方法(既存のメソッドを再利用)

class Program 
{ 
    static void Main(string[] args) 
    { 
     obj1 myobj = new obj1(); 
     serializetoxml(myobj);  
    } 
} 

public class obj1 
{ 
    public string a { get; set; } 
    public int b { get; set; } 
    public bool c { get; set; } 
} 

public static void serializetoxml(obj1 myobj) 
{ 
    XmlSerializer myserializer = new XmlSerializer(typeof(obj1)); 
    TextWriter mywriter = new StreamWriter("C:\\my.xml"); 
    myserializer.Serialize(mywriter, myobj); 
    mywriter.Close(); 
} 

今はobj2、クラスを持っています、私は再び同じ方法を記述してobj2にtypeof演算を変更しないように、私は、serializetoxmlメソッドは、パラメータの別のタイプを受け入れることができるように再利用するにはどうすればよいのパラメータ

public class obj2 
{ 
    public int a { get; set; } 
    public bool b { get; set; } 
    public List<string> c { get; set; } 
} 

として渡したいということ?

obj2 myobj = new obj2(); 
serializetoxml(myobj); 

答えて

6

試してみてください、次の

public static void serializetoxml(object myobj) { 
    XmlSerializer myserializer = new XmlSerializer(myobj.GetType()); 
    TextWriter mywriter = new StreamWriter("C:\\my.xml"); 
    myserializer.Serialize(mywriter, myobj); 
    mywriter.Close(); 
} 
6

タイプのパラメータを追加します。

public static void serializetoxml<T>(T myobj) 
{ 
    XmlSerializer myserializer = new XmlSerializer(typeof(T)); 
    TextWriter mywriter = new StreamWriter("C:\\my.xml"); 
    myserializer.Serialize(mywriter, myobj); 
    mywriter.Close(); 
} 

あなたはそれが好きで使用します。

serializetoxml<obj2>(myobj); 

または

serializetoxml<obj1>(myobj); 

型パラメータ推定の魔法で、あなたを型パラメータを完全に省略することができます(しかし、

internal static class Extensions { 
    public static void SerializeToXml<T>(this T myobj) 
     { 
      XmlSerializer myserializer = new XmlSerializer(typeof(T)); 
      TextWriter mywriter = new StreamWriter("C:\\my.xml"); 
      myserializer.Serialize(mywriter, myobj); 
      mywriter.Close(); 
     } 
} 

あなたが今いるかのようにそれを使用することができます。

serializetoxml(myobj); 
1

このように、静的クラスにメソッドを移動し、それをextension methodを作る:あなたは)そこにそれを残したい場合はOKですインスタンスメソッドでした。 Extensionsクラスを同じ名前空間に入れたり、usingディレクティブを追加する必要があります。

0

本当に問題はありません。あなたのシリアライズメソッドをジェネリック型で動作させるだけです。 スタックオーバーフローの質問を参照してください。Using generics with XmlSerializer

1

つのオプション:

  • ジェネリック:Serialize<T>(T obj)typeof(T)
  • オブジェクト:Serialize(object obj)obj.GetType()

は私が実際に二FOを好みます苦い苦い経験に基づいてrシリアル化、しかし両方が有効です。

1
public static void serializetoxml(object myobj) 
{ 
    XmlSerializer myserializer = new XmlSerializer(obj1.GetType()); 
    TextWriter mywriter = new StreamWriter("C:\\my.xml"); 
    myserializer.Serialize(mywriter, myobj); 
    mywriter.Close(); 
} 
関連する問題