현재 목록을 지정하는 아주 이상한 방법이있는 웹 서비스로 데이터를 보내는 것이 맡고 있습니다. 나는 스키마를 제어하지 못하고 상대방이 스키마를 변경하려는 시도가 실패했다. 그래서 나는 이것에 상당히 매달렸다. 특정 순서로 C#에서 병렬 배열을 XML로 직렬화
자신의 스키마를 정의하는 방법
이가 (단지 관련 비트 포함)입니다 :<xs:element name="Part">
<xs:complexType>
<xs:sequence>
<xs:element name="List">
<xs:complexType>
<xs:sequence maxOccurs="4">
<xs:element name="Name" type="xs:string" />
<xs:element name="Data" type="xs:string" />
<xs:element name="OtherData" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
내가 쉽게 구조를 직렬화하는 C# 클래스를 생성하는 xsd.exe를 사용했다. 생성 된 비트는 다음과 같습니다.
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="the namespace")]
public partial class PartList {
[System.Xml.Serialization.XmlElementAttribute("Name", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string[] Name { get; set; }
[System.Xml.Serialization.XmlElementAttribute("Data", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string[] Data { get; set; }
[System.Xml.Serialization.XmlElementAttribute("OtherData", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string[] OtherData { get; set; }
}
예, 병렬 배열입니다. 이제는 다른 문서를 통해 XML을 생성하는 다른 문서의 일화 데이터에 따라 올바른/예상 XML이 다음과 같이 표시됩니다 (예 : 두 개의 항목이있는 목록 - 설명을 위해 인라인 주석이 추가됨) :
<Part xmlns="">
<List>
<Name>Marcos Test</Name> <!-- first item -->
<Name>Pepe Lama</Name> <!-- second item -->
<Data>123131313</Data> <!-- first item -->
<Data>331331313</Data> <!-- second item -->
<OtherData>0.11</OtherData> <!-- first item -->
<OtherData>0.02</OtherData> <!-- second item -->
</List>
</Part>
내 XML 때문에 항목의 순서의 스키마에 대해 유효성 검사를 실패
<Part xmlns="">
<List>
<Name>Some Test</Name> <!-- first item -->
<Data>123131313</Data> <!-- first item -->
<OtherData>0.11</OtherData> <!-- first item -->
<Name>Other Lama</Name> <!-- second item -->
<Data>331331313</Data> <!-- second item -->
<OtherData>0.02</OtherData> <!-- second item -->
</List>
</Part>
는하지만, 내 자동 생성 된 C# 클래스는에 직렬화한다. System.Xml.Serialization.XmlSerializer를 기본 옵션과 함께 사용하여 클래스를 serialize합니다. 필자는 보통 다른 웹 서비스에 적합한 스키마를 직렬화하는 데 문제가 없습니다. 그러나 웬일인지 나는 나 자신의 삶에 대해 이것을 할 수있는 방법을 찾아 낼 수 없다 (심지어 가능하다면).
아이디어가 있으십니까? 이미 XmlOrderAttribute를 사용하여 시도했지만 결과의 순서에 차이를 만들지 않았습니다. 여기
귀하의 문제는 (https://stackoverflow.com/a/30443169/3744182) 또는 [XML [XML로 KeyValuePair의 목록을 직렬화]의 문제와 매우 유사하다 RestSharp를 사용한 시퀀스 역 직렬화] (https://stackoverflow.com/a/32885108/3744182). 둘 다 'XmlSerializer'를 사용하여 쌍 요소의 시퀀스를 deserialize하는 두 가지 다른 방법을 보여주는 대답을 갖고 있습니다. 그 대답이 충분한가요, 아니면 더 많은 도움이 필요합니까? – dbc
하나의 목록이라면 나는 그것을 하트 비트로 할 것입니다. 그러나 스키마 전체에 많은 요소가 있습니다 (5000 행 스키마 파일). 나는 이것을 구현하는 더 쉬운 방법이 있기를 바라고있다. 어쨌든 이것이 이것이 유일한 방법 일 경우, 귀하가 답변으로 게시하고 귀하를 표시하도록 제안합니다. 감사합니다. – enriquein
@dbc 답을 게시하여 동의 할 수 있도록 게시하십시오. 나는이 접근법을 직렬화에 사용할 것이다. 이 코드를 컴퓨터 생성 코드에 적용하는 문제는 XmlSerializer의 부분 클래스와 XmlOverrides를 사용하여 해결되었습니다. 해결책을 이끌어 주셔서 대단히 감사합니다. – enriquein