문제

가능한 중복:
열거형 값을 int로 어떻게 직렬화합니까?

안녕하세요 여러분!

열거형 값을 문자열 표현 대신 정수 값으로 직렬화하는 방법이 있는지 궁금합니다.

상황에 맞게 설명하려면 다음을 수행하세요.우리는 웹 서비스에 크게 의존하는 웹 애플리케이션에서 요청 유형과 관계없이 모든 요청 헤더에 대해 단일 기본 클래스를 사용하고 있습니다.

헤더에 결과 필드를 추가하고 싶기 때문에 웹 서비스 측에서 작업이 어떻게 진행되었는지에 대한 힌트를 호출 앱에 다시 전달할 수 있는 장소가 있습니다.해당 효과를 선언한 열거형이 이미 있지만 해당 열거형에 대해 알 수 없는 웹 서비스를 호출하는 레거시 앱이 있으므로 해당 값을 정수로 직렬화하여 보내고 싶습니다.

때때로 IE 최대 URL 길이를 초과했기 때문에 [XmlElement(ElementName = "stringpresentationOfAttributeName")]를 사용하여 해당 헤더의 길이를 줄여야 했습니다. 그리고 직렬화를 강제하는 유사한 속성이 있는지 궁금합니다. 값을 정수로 열거합니다.

그런 속성에 대해 들어본 적이 있는 사람이 있나요?

도와 주셔서 감사합니다, 파스칼

도움이 되었습니까?

해결책

열거형은 int로 직렬화됩니다.그러나 일반적으로 속성 중 하나가 XML로 직렬화되는 방식이 마음에 들지 않으면 다음과 같이 하면 됩니다.

[XmlIgnore]
public MyThing MyThing { get; set; }

[XmlElement("MyThing")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public string MyThingForSerialization
{
    get { return //convert MyThing to string; }
    set { MyThing = //convert string to MyThing; }
}

다른 팁

열거형은 기본적으로 int로 직렬화되지 않습니다.XMLSerializer를 사용하여 클래스를 직렬화하고 있는데 설명된 것과 동일한 문제가 있습니다.

(MyThingForSerialization의 범위를 공개로 변경하면 Matt Howells의 예가 작동하는 것처럼 보이지만 이로 인해 1개의 추가 공개 속성이 생성되므로 더 나은 구현을 보고 싶습니다.)

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