.NET WebAPI 직렬화 k_BackingField Nastiness
다음을 직렬화 할 때 :
[Serializable]
public class Error
{
public string Status { get; set; }
public string Message { get; set; }
public string ErrorReferenceCode { get; set; }
public List<FriendlyError> Errors { get; set; }
}
나는이 역겨운 엉망이된다.
<ErrorRootOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Printmee.Api">
<_x003C_Errors_x003E_k__BackingField>
An exception has occurred. Please contact printmee support
</_x003C_Errors_x003E_k__BackingField>
<_x003C_LookupCode_x003E_k__BackingField>988232ec-6bc9-48f3-8116-7ff7c71302dd</_x003C_LookupCode_x003E_k__BackingField>
</ErrorRootOfstring>
무엇을 제공합니까? 이걸 어떻게 예쁘게 만들 수 있습니까? JSON 응답에는 k_BackingField도 포함됩니다.
기본적 으로 웹 API 를 사용 [Serializable]
하거나 [DataContract]
작업 할 필요가 없습니다 .
모델을 그대로두면 Web API가 모든 공용 속성을 직렬화합니다.
포함 된 항목에 대해 더 많은 제어를 원할 경우에만 클래스와 [DataContract]
포함 할 속성을 장식합니다 [DataMember]
(DCS와 JSON.NET 모두 이러한 속성을 반영하기 때문).
어떤 이유로 [Serializable]
클래스에 를 필요로하는 경우 (즉, 어떤 이유로 메모리 스트림으로 직렬화하고, 딥 복사 등을 수행하는 경우) 지원 필드 이름을 방지하기 위해 두 속성을 함께 사용해야합니다.
[Serializable]
[DataContract]
public class Error
{
[DataMember]
public string Status { get; set; }
[DataMember]
public string Message { get; set; }
[DataMember]
public string ErrorReferenceCode { get; set; }
[DataMember]
public List<FriendlyError> Errors { get; set; }
}
더 일반적인 솔루션이 있습니다. [Serializable]
속성 을 무시하도록 Json Serializer를 구성 하여 클래스의 속성을 변경할 필요가 없습니다.
응용 프로그램 시작, 즉 Global.asax Application_Start
이벤트 에서이 구성을 변경해야합니다 .
var serializerSettings =
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver =
(DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;
날짜 직렬화에 대한 형식 지정 및 기타 여러 가지와 같이 Json 직렬화에 대한 기타 변경을 수행 할 수도 있습니다.
이는 Web API JSON 직렬화에만 적용됩니다. 앱의 다른 직렬화 (Web API XML 직렬화, MVC JsonResult ...)는이 설정의 영향을받지 않습니다.
Try using DataContract instead of Serializable for marking your class. For more detail on why, look at this good blog post on serializing automatic properties.
The [DataContract] attributes dosn't worked for me, so it was not an option.
XmlSerializer ignores [XmlAttribute] in WebApi
The above resolution solved it for me.
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
참고URL : https://stackoverflow.com/questions/12334382/net-webapi-serialization-k-backingfield-nastiness
'development' 카테고리의 다른 글
Grails에서 HibernateCriteriaBuilder를 사용할 때 "Null 값이 기본 유형 setter의 속성에 할당되었습니다"라는 오류 메시지가 나타나는 이유는 무엇입니까? (0) | 2020.09.20 |
---|---|
CSV 파일을 MySQL 워크 벤치로 가져 오는 방법은 무엇입니까? (0) | 2020.09.20 |
angularjs 지시문에서 컨트롤러를 요구하는 방법 (0) | 2020.09.20 |
3 개 div를 div로 래핑 (0) | 2020.09.20 |
Python의 다중 처리에서 "AttributeError : __exit__"문제를 해결하는 방법은 무엇입니까? (0) | 2020.09.20 |