【问题标题】:XmlSerializer - remove class name as parent element from xml output using c#XmlSerializer - 使用 c# 从 xml 输出中删除类名作为父元素
【发布时间】:2018-01-09 12:18:05
【问题描述】:

我正在尝试在 c# 中序列化一个类,但输出并不完全符合我的要求。我想去掉输出 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>

【问题讨论】:

    标签: c# xml xmlserializer


    【解决方案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 子项创建了新变量,并将子项添加为后代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多