2017-12-18 14 views
0

현재 외부 회사와의 통합 작업을하고 있으며 상호 작용은 XML 문자열로 직렬화 된 개체를 사용하여 수행됩니다. 필자가 제공 한 예제와 외부 서비스의 응답에는 태그 내부에 속성이있는 XML 태그가 포함되어 있습니다.태그 안에 속성이있는 XML 직렬화

예 : 나는이 결과 객체에 문자열 값하지만 "상태"필드로 직렬화 해제 될 수 있도록 "상태"태그 사이의 값을로 "OK"기다리고 있었다

Orignially
<?xml version="1.0" encoding="UTF-8"?> 
<Response Version="3"> 
<Status StatusCode="OK"></Status> 
</Response> 

태그가 기술적으로 비어 있기 때문에 빈 문자열로 끝납니다.

다른 개별 요구 사항이 있기 때문에 현재는 DataContractSerializer을 사용하려고하지만 '상태'예제와 같은 태그를 처리하는 방법이 확실하지 않습니다.

DataContractSerializer은 현재 상태의 "상태"태그를 역 직렬화 할 수 있습니까? 그렇지 않은 경우이 시나리오를 처리하기 위해 어떤 유형의 serializer를 사용해야합니까?

또한이 XML 구조가 무엇인지에 대한 검색 용어와 관련하여 도움이 될 것입니다. 당신은

Public Class Response 
    <System.Xml.Serialization.XmlElement()> 
    Public Property Status As Status 
    <System.Xml.Serialization.XmlAttribute()> 
    Public Property Version As Integer 
End Class 

Public Class Status 
    <System.Xml.Serialization.XmlAttribute()> 
    Public Property StatusCode As String 
End Class 

(VersionStatusCode 속성이다) 이러한 클래스 다음

에 직렬화 할 수

+0

이 도움이 될 수 있습니다 : https://stackoverflow.com/questions/4858798/datacontract-xml-serialization-and-xml-attributes – N0Alias

+0

그 속성, 진행의 부족을 설명하지 요소 – djv

+0

@djv의 아입니다 인터넷 검색. 그 점을 명확히 해 주셔서 감사합니다. 아쉽게도 DataContractSerializer는 특성을 지원하지 않습니다. 그래서 ... 다시 드로잉 보드로. –

답변

0

는 도움이된다면

Dim s As New Xml.Serialization.XmlSerializer(GetType(Response)) 
Dim r As Response 

' reading 
Using fs As New IO.FileStream("filename.xml", IO.FileMode.Open) 
    r = s.Deserialize(fs) 
End Using 

' writing 
Using fs As New IO.FileStream("filename.xml", IO.FileMode.Truncate) 
    s.Serialize(fs, r) 
End Using 

는, XML이도 같이 표현 될 수 직렬화를하다 이것은 Status 요소 자체에 문자열 값이없는 이유를 분명히해야합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<Response Version="3"> 
    <Status StatusCode="OK"/> 
</Response> 
+0

이 질문과 관련이없는 다른 요청 때문에 'DataContractSerializer'를 사용하여이 작업을 수행 할 수 있기를 바랬습니다. 불행히도 그것은'DataContractSerializer'가 속성을 지원하지 않는 것처럼 보입니다. 귀하의 답변에 감사드립니다. –

+0

나는'DataContractSerializer'를 사용한 적이 없지만 ** 속성을 지원하지 않습니다 ** 올바르게 보이지 않습니다. – djv

+0

두 곳에서 [1, Accepted answer] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/867d9872-3206-46d9-a22b-2ab59f251f99/adding- xml-attribute-to-a-datacontract? forum = wcf), [2, 여기서 허용되는 대답은 어떻게 지원 되나 지원되지 않습니다.] (https://stackoverflow.com/a/4859260/ 914779) –