2016-06-30 2 views
0

XML을 만들기 위해 XmlSerializer를 사용하고 있습니다. 그러나, 나는 출력에 www.w3.org 네임 스페이스 물건을 얻고 있으며 그것을 원하지 않는다. 나는 내 serialization 코드이다. 나는 이것을 없애기로되어 있다고 생각했던 줄인 xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty);을 포함하고 있지만, 작동하지 않는 것 같아서, 네임 스페이스 값을 BOM_Request 섹션으로 옮긴다. 나는 아래 코드와 출력을 xmlSerializerNameSpaceValue.Add(String.Empty, String.Empty);없이 출력하고 출력을 내 보냈다. 이 네임 스페이스를 제거하려면 어떻게해야합니까?String.Empty를 제공 한 후에도 XML serializer가 여전히 기본 네임 스페이스를 추가합니다.

직렬화 코드 :

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 요소 이름이 같은 세 가지 유형이 있으므로 결과 스키마에서 유형 속성을 구분해야합니다. 예를 들어, serialiser가 페이로드를 올바른 클래스로 deserialize 할 수 있습니다. 제거하려면 단일 클래스 또는 여러 요소 이름을 사용해야합니다. –