2012-02-22 8 views
4

オブジェクトがある限り、一般的なフィールドObjectの実際の型はXmlElement属性のリストに含まれているように、意図したとおりにXMLにシリアライズすることができます。ジェネリッククラスをXMLにシリアル化するには?次のクラスの

public class SerializedObject<T> : Serializable where T : Serializable 
{ 
    [System.Xml.Serialization.XmlElement(Type = typeof(Weapon))] 
    [System.Xml.Serialization.XmlElement(Type = typeof(Armor))] 
    [System.Xml.Serialization.XmlElement(Type = typeof(QuestItem))] 
    public T Object; 

    public string ObjectId; 
    public int ID; 

    public SerializedObject() { } 

    public SerializedObject(T _object) 
    { 
     Object = _object; 
     ID = Object.Id; 
     ObjectId = Object.ObjectId; 
    } 
} 

質問です:

XmlElement属性のTのすべてのタイプを指定せずに、汎用フィールドObjectを含むこのクラスのオブジェクトをシリアル化するにはどうすればよいですか?

+0

C#の場合:ここで

public static XmlDocument SerializeToXmlDocument<XmlEntity>(XmlEntity o) { XmlDocument xdoc; SerializeWrapper<XmlEntity> wrapper = new SerializeWrapper<XmlEntity>(); wrapper.XmlObject = o; XmlSerializer xs = new XmlSerializer(wrapper.GetType()); using (MemoryStream ms = new MemoryStream()) { xs.Serialize(ms, wrapper); xdoc = new XmlDocument(); ms.Position = 0; xdoc.Load(ms); } return xdoc; } 

今すぐオブジェクト

[XmlRoot("Root")] public class SerializeWrapper<TObject> { [XmlAttribute()] public string Name { get; set; } public TObject XmlObject { get; set; } } 

をラップするために使用されるクラスです、あなただけのようにそれを呼び出すことができますテンプレートはありません。それにはジェネリックがありますが、それは全く異なっています。 –

+0

清算してくれてありがとう(私はプログラミングに慣れていない)。 – Gabriel

答えて

2

私もこれに遭遇しました。私がやったことはラッパークラスを作成している:、FYI

Weapon weapon = new Weapon() 
var xdoc = SerializeToXmlDocument<Weapon>(weapon); 
関連する問題