Изменение унаследованного имени класса в XML C # - PullRequest
2 голосов
/ 06 октября 2010

Я сериализирую набор классов, который выглядит следующим образом:

public class Wrapper
{
    IInterface obj;
}

public interface IInterface 
{
}

[XmlType("ClassA")]
public ImplA : IInterface 
{
}

В настоящее время сгенерированный XML выглядит как

<Wrapper>
   <IInterface xsi:type="ClassA">
...
   </IInterface>
</Wrapper>

Есть ли в любом случае включить имя пользовательского типа в качестве имени элемента вместо включения его в тип?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Вы должны использовать XmlIncludeAttribute:

public class Wrapper
{
    //XmlInclude should in this case at least include ImplA, but you propably want all other subclasses/implementations of IInterface
    [XmlInclude(typeof(ImplA)), XmlInclude(typeof(ImplB))]
    IInterface obj;
}

Это информирует сериализатор xml о подтипах IInterface, которые может содержать свойство.

1 голос
/ 06 октября 2010

Если вы хотите сделать это для этого дерева, вы можете поместить объявление XmlElementAttribute в вашу оболочку:

public class Wrapper
{
    [XmlElement(ElementName="ClassA")]
    IInterface obj;
}
...