2014-10-16 2 views
1

json에서 enum을 직렬화하려고합니다. Enum 값이 "Male"및 "Female"인 경우 나는 그것을 "M"과 "F"로 원합니다. 다음 코드 샘플은, 그것은 XmlSerializer를 위해 작동하지만 난 그것을 ServiceStack을 사용하여 사용자 지정 Json 열거 형 serialization

public enum Gender 
{ 
    [EnumMember(Value = "M"), XMLEnum("M")] 
    Male, 

    [EnumMember(Value = "F"), XMLEnum("F")] 
    Female 
} 

P.S. JsonSerializer

을 위해 일해야 Json Serializer로 ServiceStack을 사용하고 있습니다

답변

1

좋은 접근 방법은 ServiceStack 구성 객체의 SerializeFn 루틴을 사용하고 성별 열거 형에 대한 사용자 정의 직렬화를 구성하는 것입니다.

var person = new Person() 
{ 
    FullName = "John Johnson", 
    Gender = Gender.Male 
}; 

JsConfig<Gender>.SerializeFn = c => 
    c.Equals(Gender.Male) ? "M" : "F"; 

var result = person.ToJson(); // {"FullName":"John Johnson","Gender":"M"} 

업데이트 : 우리는 당신이 4+에 ServiceStack.Text 라이브러리를 업그레이드 할 수 있고, 당신은 확실히 기존의 enummember 여기, 속성을 활용하고자하는 결정 이후 인 SerializeFn 접근 방식을 완전히 생략 솔루션 .

기존의 enummember 속성을 사용할 수있는 ServiceStack.Text.EnumMemberSerializer이라는 추가적인 너겟 패키지를 설치할 수 있습니다.

new EnumSerializerConfigurator() 
    .WithEnumTypes(new Type[] { typeof(Gender) }) 
    .Configure(); 

JsConfig.Reset(); 

var result = JsonSerializer.SerializeToString(person); // {"FullName":"John Johnson","Gender":"M"} 

ServiceStack.Text 3.9로 테스트 한 결과 작동했습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 똑같은 것을 시도했지만 나를 위해 일하는 것 같지 않습니다. – Krushal

+0

열거 형을 직렬화하는 데 사용하는 정확한 코드로 질문을 업데이트 할 수 있습니까? 또한 문제가 될 수 있으므로 ServiceStack 라이브러리의 버전을 지정할 수도 있습니다. –

+0

여전히 "M"대신 "남성"을 제공합니다. 사용중인 제품 버전 : 3.9.59.0 – Krushal