将空字段解析为XML

问题描述 投票:1回答:1

我正在解析XML文件中某些元素中的空字符串的类,如下所示。

objectCxml.Request.InvoiceDetailRequest.InvoiceDetailRequestHeader.InvoiceDetailHeaderIndicator = "";
XmlSerializer s = new XmlSerializer(typeof(cXML));
XmlTextWriter tw = new XmlTextWriter(path, Encoding.UTF8);
s.Serialize(tw, objectCxml);  

它生成如下所示的xml

<InvoiceDetailHeaderIndicator xsi:type="xsd:string"/>

但是我想要它如下

<InvoiceDetailHeaderIndicator/>

任何建议?

c# xml-serialization
1个回答
1
投票

InvoiceDetailHeaderIndicator属性为object

所以...不这样做吗?设为string,就应该设置好。

最终,这里的要点是XmlSerializer希望能够可靠地往返数据;那是它的工作。有两种方法:

  1. 静态知道类型(即在类型模型中为string而不是object
  2. 在有效负载中嵌入了其他元数据(xsi:type="xsd:string"

如果您不想要2,则需要1,否则它不起作用。坦白说,1是一个更好的主意anyway

我使用本地最小设置进行了测试,但效果很好:

public class InvoiceHeaderThing
{
    public string InvoiceDetailHeaderIndicator { get; set; }
}

下面的完整代码:

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

static class P
{
    static void Main()
    {
        const string path = "my.xml";

        var objectCxml = new cXML();
        objectCxml.Request.InvoiceDetailRequest.InvoiceDetailRequestHeader.InvoiceDetailHeaderIndicator = "";
        XmlSerializer s = new XmlSerializer(typeof(cXML));
        using (XmlTextWriter tw = new XmlTextWriter(path, Encoding.UTF8))
        {
            s.Serialize(tw, objectCxml);
        }

        Console.WriteLine(File.ReadAllText(path));
    }
}

public class cXML
{
    public RequestThing Request { get; set; } = new RequestThing();
}
public class RequestThing
{
    public InvoiceDetailThing InvoiceDetailRequest { get; set; } = new InvoiceDetailThing();
}
public class InvoiceDetailThing
{
    public InvoiceHeaderThing InvoiceDetailRequestHeader { get; set; } = new InvoiceHeaderThing();
}
public class InvoiceHeaderThing
{
    public string InvoiceDetailHeaderIndicator { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.