C # - Сериализация списка объектов в XML с использованием общего метода [duplicate]

Вы можете позже получить доступ к этому члену в любом экземпляре:

int main()
{    
  int Car::*pSpeed = &Car::speed;    
  Car myCar;
  Car yourCar;

  int mySpeed = myCar.*pSpeed;
  int yourSpeed = yourCar.*pSpeed;

  assert(mySpeed > yourSpeed); // ;-)

  return 0;
}

Обратите внимание, что вам нужен экземпляр для его вызова, поэтому он не работает как делегат.

Обычно использование интерфейса (т. Е. Чистого базового класса на C ++) является лучшим выбором дизайна.

78
задан Konstantin Dinev 15 November 2012 в 17:58
поделиться

4 ответа

Это ограничение XmlSerializer, оно не сериализует свойства только для чтения, то, что вы сделали во втором примере, - это, по сути, хак, чтобы заставить его сериализоваться, однако это бесполезно, если вам нужно его десериализовать позже.

В качестве альтернативы вы можете переключиться на использование DataContractSerializer , это более гибко.

48
ответ дан James 26 August 2018 в 04:11
поделиться

, если вы хотите иметь частные сеттеры и чтобы объект был сериализуемым / десериализуемым, impliment ISerializable и создать конструктор, такой как MyObject (информация SerializationInfo, контекст StreamingContext). Пример находится здесь .

9
ответ дан Community 26 August 2018 в 04:11
поделиться

Ограничение XMLSerializer - Свойства без сеттера не могут быть сериализованы.

Но вы можете использовать DataContractSerializer для сериализации private setter properties -

[DataMember]
public string Id
{
    get
    {
         return Guid.NewGuid().ToString();
    }
    private set {}
}
6
ответ дан Rohit Vats 26 August 2018 в 04:11
поделиться

Атрибуты сериализации используются для сериализации и десериализации объектов. XmlSerializer предположит, что вам не нужно сериализовать любое свойство, которое не имеет сеттера. Сеттер будет использоваться при десериализации строки в объект, потому что нужно создать экземпляр объекта, а затем установщик будет использован для заполнения значения свойства.

0
ответ дан Rui Jarimba 26 August 2018 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: