2016-06-30 8 views
0

XMLを作成するためにXmlSerializerを使用しています。しかし、私の出力にはwww.w3.orgの名前空間のものがあります。私はそれを望んでいません。私は私のシリアル化コードです。私はこれを取り除くはずだと思っていた xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty);という行を含めていますが、動作していないようで、名前空間の値をBOM_Requestセクションに移動するだけです。私はxmlSerializerNameSpaceValue.Add(String.Empty, String.Empty);とその出力なしで、私のコードを下書きして出力をindcluded。どうすればこれらの名前空間を取り除くことができますか?XMLシリアライザは、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; } 
} 
+0

'RequestPayload'クラスはどのようなものですか? – dbc

+0

@dbcただ追加しました – intA

答えて

0

BOM_Requestには、タイプをLossIncurredPayloadと識別するためのxsi:type属性があります。その属性に必要なので、ここでxsi名前空間を指定することを避ける方法はありません。

+0

私はRequestPayloadクラスを私の質問に追加しました。そこに[XmlIncludeAttribute]タグがあるからですか?この問題は、それらを追加するとポップアップを開始しました。本当にその周りに道はありませんか? – intA

+0

@intA同じ要素名を持つ3つの異なる型があるため、結果のスキーマで型属性を区別する必要があります。これは、たとえば、シリアライザがペイロードを正しいクラスにデシリアライズすることを可能にします。それを取り除きたい場合は、単一のクラスまたは複数の要素名を使用する必要があります。 –

関連する問題