문제

SOAP/XML을 사용하여 HashTable(또는 문자열 인덱서를 통해 가장 잘 탐색되는 데이터)을 직렬화하는 가장 좋은 방법은 무엇입니까?

내가 가지고 있다고 가정 해 봅시다 Foo 그건 속성을 가지고 있어 Bar[] Bars.ㅏ Bar 객체에는 키와 값이 있습니다.기본적으로 이는 다음 XML로 직렬화됩니다.

<Foo>
  <Bars>
    <Bar key="key0" value="value0"/>
    ...
  </Bars>
</Foo>

JSON의 경우 이는 다음과 같이 직렬화됩니다.

{"Foo":["Bars":[{"Key":"key0","Value":"key1} ... ]}]}

제가 정말 갖고 싶은 것은 기본 관계를 더 잘 반영하기 위한 직렬화입니다.예:

<Foo>  
  <Bars>  
    <Key0 value="value0"/>
    <Key1 value="value1"/>
    ...
  </Bars>
</Foo>

이런 방식으로 SOAP로 직렬화하는 데 몇 가지 문제가 있다는 것을 알고 있지만 이를 더 잘 반영하는 스키마를 제공하는 가장 좋은 접근 방식은 무엇입니까?

BarsCollection 개체를 만들고 이에 대한 사용자 지정 직렬화를 정의하려고 시도했지만 실제로 해당 개체에 대한 직렬화를 호출하지 않는 것 같습니다.예:

void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {  
  foreach (Bar bar in Bars){           
    info.AddValue(bar.Key. bar);
  }
}  

어떤 제안이 있으십니까?여기서 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

나는 당신이 원하는 것이 구조를 더 잘 반영한다고 생각하지 않습니다.이에 대한 스키마(XSD를 생각해 보세요)를 정의하려면 각 키가 별도의 사용자 정의 유형이 되도록 지정하기 때문에 잠재적인 키를 모두 미리 알아야 합니다.개념적으로 Bars는 Key0, Key1 유형의 객체를 보유하는 객체 배열이며, 각 KeyN 클래스는 값 속성을 포함합니다.나는 첫 번째 직렬화가 실제로 기본 구조를 가장 잘 반영한다고 믿습니다.JSON에서 원하는 대로 "작동"하는 이유는 입력을 잃어버리기 때문입니다. 모든 것이 객체일 뿐입니다.유형에 관심이 없다면 JSON을 사용하지 않는 이유는 무엇입니까?

다른 팁

ISerialized는 xml 직렬화에 사용되지 않습니다.바이너리 직렬화에 사용됩니다.IXmlSerialized를 구현하는 것이 더 좋습니다.

그러나 나는 KeyedCollection이 당신이 생각하는 것과 더 비슷하게 직렬화한다고 생각합니다.<key0 ...을 결코 얻지 못할 것이라는 점을 제외하면 .../> <키1 .../> 요소가 클래스에 매핑되기 때문입니다.

SOAP 확장에서 해시테이블을 전달할 수 있습니다.이렇게 하면 원하는 방식으로 직렬화할 수 있습니다.클라이언트와 서버에 있어야 하는 사용자 정의 코드가 있지만.

SOAP 프로토콜의 기본 키가 누락된 것 같습니다.

SOAP 프로토콜에 대해 제가 정말 좋아하는 점 중 하나는 WSDL 파일에서 임의의 개체(메서드와 함께)를 정의하고 SOAP 프로토콜을 사용하여 이러한 개체를 한쪽 끝에서 다른 쪽 끝으로 전달할 수 있다는 것입니다.한쪽 끝에서 데이터를 직렬화한 다음 다른 쪽 끝에서 직렬화 해제할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top