Опустить узел на XmlSerializer.Serialize - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть библиотека классов, предоставленная третьей стороной, с типом там, называемым SaveAccount.Когда я пытаюсь сериализовать этот класс, я получаю следующий xml:

<?xml version="1.0" encoding="utf-16"?>
<SaveAccount xmlns="http://RiskBrowser/ExposureManager">
  <Body>
    <Token>JHSDUKJSHDKJ</Token>
    <JobId>2</JobId>
  </Body>
</SaveAccount>

Что мне нужно сделать, это удалить только теги <Body>, поэтому я получаю следующее:

<?xml version="1.0" encoding="utf-16"?>
<SaveAccount xmlns="http://RiskBrowser/ExposureManager">
  <Token>JHSDUKJSHDKJ</Token>
  <JobId>2</JobId>
</SaveAccount>

Есть ли хороший способ сделать это внутри XmlSerializer?Или еще один хороший способ думать?Я действительно не хочу начинать взламывать сгенерированный XML.

Большое спасибо заранее

Ответы [ 3 ]

3 голосов
/ 21 февраля 2011

Если Body является публичным свойством (т. Е. SaveAccount не является IXmlSerializable) и в SaveAccount нет других свойств для сериализации, вы можете удалить этот узел, сериализовав Body напрямую и применив XML-сериализаторАтрибут переопределяет, чтобы переименовать и назначить правильное пространство имен для результирующего элемента.В противном случае вы можете создать собственный XmlWriter и подавить этот узел при записи.

1 голос
/ 21 февраля 2011

Отметьте тип атрибутом XmlIgnore, например:

[XmlIgnore]
public AType Body;

Если вы не можете перестроить стороннюю библиотеку, вы можете использовать класс XmlAttributeOverrides для переопределения способа сериализации объектов по умолчанию, что-то вроде:

XmlAttributes ignore = new XmlAttributes() { XmlIgnore = true};
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof (AType), "Body", ignore);
XmlSerializer ser = new XmlSerializer(typeof(BType), overrides);
1 голос
/ 21 февраля 2011

В этой ситуации одним из способов было бы манипулировать XML после его создания, чтобы удалить из него узел Body, используя LINQ to XML или System.Xml.

...