XmlSerialization, сериализация только одного свойства дочернего элемента - PullRequest
1 голос
/ 29 июня 2011

С такой моделью, как ..

class Base {
  public Child Child { get; set; }
}
class Child {
  public int Id { get; set; }
  // other properties
}

Я хочу выполнить сериализацию Xml, но для объекта Child в Base я хочу только сериализовать свойство Id.Остальная часть объекта Child будет сериализована в отдельный файл.Можно ли обойтись без изготовления двух комплектов моделей?

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Если вы сериализуете Child только в контексте Base, вы можете пометить других участников [XmlIgnore], и они не будут отображаться.

Если вам нужен другой макет в разных контекстах, вы можете использовать XmlAttributeOverrides для определения модели во время выполнения, но это не тривиально. Кроме того, если вы сделаете это, вы ДОЛЖНЫ кешировать и повторно использовать полученный XmlSerializer (есть ctor, который принимает переопределения), или он будет пропускать динамические сборки (есть встроенный кеш для тривиальных сериализаторов typeof(SomeRoot), но пользовательские сериализаторы не кэшируются автоматически и генерируют сборку для каждой; сборки не могут быть выгружены .

1 голос
/ 29 июня 2011

Возможно, вы можете использовать атрибут XmlIgnore во всех других свойствах. Не уверен, что это даст результат, к которому вы стремитесь.

...