2008-09-22 5 views
2

가능한 중복 :
How do I serialize an enum value as an int?열거 형 값의 직렬화를 강제로 정수로 변환 할 수 있습니까?

안녕, 모두!

문자열 표현 대신 정수 값으로 enum 값의 직렬화를 강제 실행하는 방법이 있는지 궁금합니다.

컨텍스트에 넣으려면 : 우리는 웹 서비스에 많이 의존하는 웹 응용 프로그램에서 요청 유형과 관계없이 모든 요청 헤더에 대해 단일 기본 클래스를 사용하고 있습니다.

결과 필드를 헤더에 추가하려고하므로 웹 서비스 측면에서 작업이 어떻게 진행되었는지에 대한 정보를 호출하는 응용 프로그램에 전달할 수 있습니다. 우리는 이미 그 효과를 선언 한 열거 형을 가지고 있지만 열거 형에 대해 알지 못할 수도있는 웹 서비스를 호출하는 기존의 응용 프로그램이 있으므로이 값을 정수로 직렬화하여 보내고 싶습니다.

가끔씩 IE 최대 URL 길이를 초과했기 때문에 [XmlElement (ElementName = "string representationOfAttributeName")]을 사용하여 해당 헤더의 길이를 줄였습니다. 비슷한 속성이 있는지 궁금해했습니다. 열거 형 값의 직렬화를 정수로 강제합니다.

그런 속성을 들어 본 사람은 누구입니까?

은 이제까지 도움을 주셔서 감사합니다, 파스칼

답변

6

열거 형은의 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; } 
} 
+0

은 (당신이 대중에게 MyThingForSerialization의 범위를 변경하지만 난이 1 여분의 공공 재산을 만드는 더 나은 구현 원인을보고 싶은 경우 매트 하월의 예는 작동하는 것 같다) 공공의. XmlSerializer는 개인 필드/속성을 보지 않습니다. – Miral

+0

@Miral 나는 그것을 해결하기 위해'EditorBrowsable'과'Browsable' 속성을 추가했습니다. – Shimmy

+0

아주 좋았어 ... 나 또한 나를 위해 일했다. 그래서 파일이 액세스 수준 이상을 저장했기 때문에 변환 인터프리터를 실행할 수 있었다. – RiddlerDev

3

열거 형은 기본적으로 int로서 직렬화하지 않습니다. XMLSerializer를 사용하여 클래스를 직렬화하고 설명 된 것과 동일한 문제가 발생합니다. MyThingForSerialization`이되어야한다 '것을