【问题标题】:XML Serializer still adding default namespaces even after supplying with String.Empty即使在提供 String.Empty 之后,XML 序列化程序仍会添加默认命名空间
【发布时间】:2016-06-30 20:14:31
【问题描述】:

我正在使用 XmlSerializer 创建一些 XML。但是,我在输出中得到了 www.w3.org 名称空间的东西,我不想要它。我是我的序列化代码,我包含该行 xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty); 我认为应该摆脱它,但它似乎不起作用,它只是将命名空间值移动到我的 BOM_Request 部分。我在下面包含了我的代码以及没有xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty); 的输出以及带有它的输出。我怎样才能摆脱这些命名空间?

序列化代码:

XmlSerializer serializer = new XmlSerializer(typeof(Request));
StringWriter stringWriter = new StringWriter();
String xmlRequest;

XmlSerializerNamespaces xmlSerializerNameSpaceValue = new                     
XmlSerializerNamespaces();
xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty);
serializer.Serialize(stringWriter, request, xmlSerializerNameSpaceValue);

xmlRequest = stringWriter.ToString();
stringWriter.Close();

没有:

<?xml version="1.0" encoding="utf-8"?>
<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <RequestHeader>
    <Field fieldName="RuleServTypeCode" value="FVAR" />
  </RequestHeader>
  <RequestPayload>
    <BOM_Request xsi:type="LossIncurredPayload" path="1" sequenceNum="1" requestSentDate="2016-06-30" validationType="LossInc" transactionId="10" decisionType="LossInc">
      <BOM_Policy path="1" sequenceNum="1" log_key="760" clm_ser_nbr="416006" />
    </BOM_Request>
  </RequestPayload>
</Request>

与:

<?xml version="1.0" encoding="utf-8"?>
<Request>
  <RequestHeader>
    <Field fieldName="RuleServTypeCode" value="FVAR" />
  </RequestHeader>
  <RequestPayload>
    <BOM_Request d3p1:type="LossIncurredPayload" path="1" sequenceNum="1" requestSentDate="2016-06-30" validationType="LossInc" transactionId="10" decisionType="LossInc" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance">
      <BOM_Policy path="1" sequenceNum="1" log_key="760" clm_ser_nbr="416006" />
    </BOM_Request>
  </RequestPayload>
</Request>

RequestPayload 类:

[XmlIncludeAttribute(typeof(LossTrxPayload))]
[XmlIncludeAttribute(typeof(PremiumPayload))]
[XmlIncludeAttribute(typeof(LossIncurredPayload))]
public class RequestPayload
{
    [XmlElement]
    public List<Payload> BOM_Request { get; set; }
}

【问题讨论】:

  • RequestPayload 类 lool 是什么样的?
  • @dbc 刚刚添加了

标签: c# xml serialization xml-serialization xmlserializer


【解决方案1】:

您的BOM_Request 有一个xsi:type 属性,用于将类型标识为LossIncurredPayload。您无法避免在此处指定 xsi 命名空间,因为它是该属性所必需的。

【讨论】:

  • 我刚刚将 RequestPayload 类添加到我的问题中。是因为我那里有 [XmlIncludeAttribute] 标签吗?一旦我添加了这些,这个问题就开始出现了。真的没有办法了吗?
  • @intA 您有三个不同类型的元素名称相同,因此需要 type 属性在生成的模式中区分它们。例如,这允许序列化程序将您的有效负载反序列化为正确的类。如果你想摆脱它,你需要使用单个类或多个元素名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2018-02-19
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2011-07-18
相关资源
最近更新 更多