XmlSerializer - удалить имя класса в качестве родительского элемента из вывода xml с помощью С#

Я пытаюсь сериализовать класс в С#, но результат не совсем тот, который мне нужен. Я хочу избавиться от одного элемента в выходном xml — имени класса — который появляется вместе с сериализацией.

Мой класс:

[XmlType("ADSobjotsing")]
public class ObjKompParam
{
    [XmlElement("aadressTekst")]
    public string Tekst;

    [XmlElement("adsOid")]
    public string OID;

Мой код:

    protected override XElement ComposeQueryBody(object InputParams)
    {
        ObjKompParam param = (ObjKompParam)InputParams;

        var ads_o_q = new ObjKompParam();

        XElement body = new XElement(SOAPNS + "Body",
           new XElement(prod + "ADSobjotsing"));

        var ns = new XmlSerializerNamespaces();
        ns.Add("", "");

        XmlSerializer serializer = new XmlSerializer(typeof(ObjKompParam),"");

        XElement xe;
        using (var stream = new MemoryStream())
        {
            serializer.Serialize(stream, param, ns);
            stream.Position = 0;
            using (XmlReader reader = XmlReader.Create(stream))
            {
                xe = XElement.Load(reader);
            }
        }
            body.Descendants(prod + "ADSobjotsing").First().Add(new XElement(xe));

        return body;
    }

Вывод, который я получаю:

<SOAP-ENV:Body>
    <prod:ADSobjotsing>
        <ADSobjotsing>
            <aadressTekst>Sügise 10</aadressTekst>
        </ADSobjotsing>
    </prod:ADSobjotsing>
</SOAP-ENV:Body>

Вывод xml (тело) Я после выглядит следующим образом:

<SOAP-ENV:Body>
    <prod:ADSobjotsing>
        <aadressTekst>Sügise 10</aadressTekst>
    </prod:ADSobjotsing>
</SOAP-ENV:Body>

person kirkeN    schedule 09.01.2018    source источник


Ответы (1)


Отвечаю сам себе, как выработал решение:

 XmlSerializer serializer = new XmlSerializer(typeof(ObjKompParam),"");

        XElement xe;
        using (var stream = new MemoryStream()) //write into stream
        {
            serializer.Serialize(stream, param, ns); //writer, object
            stream.Position = 0;
            using (XmlReader reader = XmlReader.Create(stream))
            {
                xe = XElement.Load(reader);
            }
        }
        var child = xe.Descendants();
        body.Descendants(prod + "ADSobjotsing").First().Add(child);
        return body;

Я сделал новую переменную для объекта класса ObjKompParam дочерними элементами и добавил дочерние элементы в качестве потомков.

person kirkeN    schedule 10.01.2018