C #: Какие члены будут сериализованы в элемент XML при создании класса [Serializable] - PullRequest
0 голосов
/ 21 ноября 2018

Учитывая класс, помеченный как [Serializable], как узнать, будет ли его член сериализован или нет ( член не имеет атрибута ) с помощью XmlSerializer?

Например:

[Serializable]
public class C2
{
    public int x1 = 1;
    private int x2 = 2;
    public static int x3 = 3;
    public readonly int x4 = 4;

    public int Y1 { get; set; }
    public static int Y2 { get; set; }
}

У нас есть класс C2, и после сериализации нового объекта C2 c = new C2() в строку XML я обнаружил, что только x1 и Y1 сериализуются.Поэтому я выводю , что:

  1. public поле и свойство будут сериализованы.
  2. private поле и свойство не будут сериализованы.
  3. static и readonly поле и свойство не будут сериализованы.
  4. MethodInfo не будет сериализовано.
  5. ...

Мой вопрос заключается в том, есть ли какие-либо рекомендации, позволяющие узнать, что: без пометки какого-либо атрибута для члена класса, откуда мы знаем, что этот член будет сериализованили нет?

1 Ответ

0 голосов
/ 21 ноября 2018

Поскольку в сериализации XML не используется SerializableAttribute, нет разницы в том, какие свойства будут сериализованы в XML с или без [Serializable] в классе (см. Что такое [Сериализуемый] и когда мне следует его использовать? по причинам его использования).

Похоже, вы уже правильно получили список того, что сериализуется из Введение в сериализацию XML :

Сериализация сериализации XMLтолько открытые поля и значения свойств объекта в поток XML.XML-сериализация не включает информацию о типе.

...