2013-10-14 4 views
0

есть ли возможность, чтобы я сериализовал объект без необходимости добавлять его фактический корневой тег. Это звучит немного любопытно, так I'm добавляя код that'll объяснить, что я имею в виду:Сериализовать тип без его тега типа

class Test { 
    public MyClass M; 
} 

class MyClass { 
    public int A; 
    public int B; 
} 

Члены A и B должны теперь не сериализовать М а к Коренной класса Test, как из следующих :

<Test> 
    <A>3</A> 
    <B>4</B> 
</Test> 

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

+0

Не уверен, что вы просите, но ваши классы и XML будет сериализация. –

+0

Я знаю, что это будет сериализоваться, но не так, как я хочу. В настоящее время это будет сериализовать в , но я хочу, чтобы передать данные от MyClass для тестирования – HimBromBeere

ответ

0

XmlSerializer по умолчанию не поддерживает это поведение. Класс может реализовать IXmlSerializable или создать документ с XDocument.

См: XML serialization of a nested object, but at the root level

public string Serialize(Test test) 
{ 
    var document = 
     new XDocument(
      new XElement("Test", 
       new XElement("A", test.M.A), 
       new XElement("B", test.M.B))); 

    return document.ToString(); 
} 

var test = new Test { M = new MyClass { A = 1, B = 2 } }; 

Console.WriteLine(Serialize(test)); 

Выходы:

<Test> 
    <A>1</A> 
    <B>2</B> 
</Test> 
0

Я думаю, что это невозможно сделать с помощью XmlSerializer класс. Но вы всегда можете использовать XmlReader и XmlWriter для сериализации и десериализации данных вручную.

Смежные вопросы