Игнорировать функции / методы класса во время сериализации XML - PullRequest
0 голосов
/ 27 октября 2010

Как игнорировать функцию / метод класса, чтобы можно было сериализовать его на диск для дальнейшего использования?

Я искал и действительно не могу найти ответы. Мне нужен ToString (), потому что я добавляю каждый экземпляр Person в список. ToString () - это то, что отображается в списке. Затем я использую выбранные предметы, чтобы вернуть его обратно для работы с объектом.

x = (Персона) список выбранных элементов.

Если я попытаюсь сериализовать его, как показано ниже, он взорвется.

public class Person
{    
    public Person()
    {
        messages = new List<Message>();
    }

    public string name{ get; set;}        
    public List<Message> messages{ get; set;}        

// How do you ignore this????
// [XMLIgnore] does not work
    public override string ToString()
    {
        return name;
    }
}

Вот вызов для его сериализации. Он взрывается, когда я пытаюсь создать объект XmlSearlizer.

Другие классы, у которых нет методов / функций, работают нормально. Нет проблем.

public void serializeToXML<T>(T test)
{
    // If object has method or function it blows up here.
    XmlSerializer serializer = new XmlSerializer(typeof (T));
    // Hardcoded just for a test.
    TextWriter textWriter = new StreamWriter(@"C:\test.xml"); 
    serializer.Serialize(textWriter, test);
    textWriter.Close();
}

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

ToString() не влияет на XmlSerializer. XmlSerializer сериализует только общедоступные свойства и поля. Не методы.

Я запустил ваш пример кода, заменив Message на string, и он отлично сериализовался в .NET 3.5. В вашем Message классе есть что-то, что вы не включили, что вызывает любую ошибку, которую вы видите.

0 голосов
/ 27 октября 2010

Вам действительно нужен метод ToString ()? Почему вы не можете просто использовать свое свойство name?

...