2011-04-19 5 views
2

Dictionary 속성을 비롯하여 개체 데이터를 반환하는 WCF 메서드를 개발 중입니다. XML에는 많은 양의 마크 업이 포함되어 있으며 마크 업을 줄이는 방법이 있는지 궁금해하고있었습니다. 각 추가 가스 소자 용wcf 사전 형식에 대한 XML 마크 업 감소

<gases> 
<a:KeyValueOfstringfloat> 
    <a:Key>CH4</a:Key> 
    <a:Value>40</a:Value> 
</a:KeyValueOfstringfloat> 
<a:KeyValueOfstringfloat> 
    <a:Key>CO2</a:Key> 
    <a:Value>60</a:Value> 
</a:KeyValueOfstringfloat> 
</gases> 

수집, 그 양은 첨가와 함께 추가로 첨가 <a:KeyValueOfstringfloat> :

아래는 사전 현재 XML 출력의 일례이다.

감사합니다.

답변

0

두 가지 옵션이 있지만 둘 다 .NET Dictionary 형식을 사용하지 않아도됩니다. 원하는 출력을 얻은 경우 look at the accepted answer to this question.

간단한 XML을 원한다면 간단한 클래스 구조를 사용해야합니다. 문자열의 배열 인 key라는 속성을 포함하는 가스 클래스를 정의합니다. 나는 결과물 인 비누 XML이 당신이 보여준 것과 같을 것이라고 확신한다.

두 경우 모두 실제로 원하지 않을 수 있습니다. 나는 XML의 핵심 요소가 각 키/값 쌍마다 달라야한다고 추측하고 있지만이를 처리 할 클래스를 설계 할 수 있어야합니다 (예를 들어 이름 및 값 문자열 속성으로 항목 클래스를 생성). 가스 클래스를 사전으로 사용하려면 코드를 작성해야합니다.

UPDATE : 여기에 CollectionDataContract 속성이 될 수있는 방법 구성의 예입니다 아마

[CollectionDataContract(
    Name = "Cities", 
    ItemName = "city", 
    KeyName = "cityName", 
    ValueName = "population")] 
public class CityList 
    : IDictionary<string, int>, 
     IEnumerable<System.Collections.Generic.KeyValuePair<string, int>> 
{ 
/// snipped 
} 
+0

collectiondatacontract를 사용하면 콜렉션 기반 멤버가 동일한 datacontract에 포함되거나 별도의 datacontract가 필요하지 않으므로 둘 다 messagecontract에 구현됩니까? – Unflux

+0

무엇을 묻고 있는지 확실하지 않지만 아래 링크는 CollectionDataContract 특성 사용에 대해 알아야 할 모든 정보를 제공합니다. 링크 : http://msdn.microsoft.com/en-us/library/aa347850.aspx –

0

당신이 찾고있는,하지만 많은 도움이 될 것입니다 와이어를 통해 메시지를 Gzip으로는 - 보내고 정확히 무엇

+0

유선을 통해 데이터를 압축한다는 아이디어가 논의되었지만 다른 옵션을 장치의 리소스로 활용하는 것이 좋습니다. 상호 작용하는 것은 제한적입니다. 그것은 압축이 더 적합한 선택일지도 모른다. 모든 아이디어는 환영합니다. 그렇긴하지만 당신의 의견에 감사드립니다. [: – Unflux