2012-03-30 7 views
11

XmlSerializerISerializableGetObjcetData()を呼び出しません。いつGetObjectData()と呼ばれますか?ありがとう!ISerializableを実装するときにGetObjectData()メソッドがヒットすることはありません

class Program 
{ 
    static void Main(string[] args) 
    { 
    var thing = new Thing { Name = "Dude", Id = 1 }; 
    var xmlSerializer = new XmlSerializer(typeof(Thing)); 

    var sw = new StringWriter(); 
    xmlSerializer.Serialize(sw, foo); 
    var serializedXml = sw.ToString(); 

    var sr = new StringReader(serializedXml); 
    var result = (Thing)xmlSerializer.Deserialize(sr); 
    }   
} 

public class Thing : ISerializable 
{ 
    public string Name { get; set; } 
    public int Id { get; set; } 

    public Thing() { }   
    public Thing(SerializationInfo info, StreamingContext context) { } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
    // Breakpoint placed on the following line never gets hit: 
    throw new NotImplementedException(); 
    } 
} 
+4

バイナリシリアル化とXMLシリアル化が混在しています。 ISerializableは、BinaryFormatterを使用する場合にのみ意味があります。 –

答えて

18

XmlSerializerはGetObjectDataを呼び出しません。バイナリと石鹸があります。 xmlシリアル化を管理する場合は、代わりにIXmlSerializableを使用してください。

+0

ありがとうございました。 –

関連する問題