ASP.NET XML 직렬화 문제: DataContractSerializer에 대한 관찰
5676 단어 csharpxmldotnetserialization
그들은 테스트 XML 페이로드를 가지고 있었지만 그 중 절반만 계속해서 전송되었습니다.
가장 먼저 의심되는 것은
DataContract
/DataMember
속성이 누락되었지만 모든 것이 정상인 것 같습니다.[DataContract(Name = "ComplexObject", Namespace = "")]
public class ComplexObject
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Location { get; set; }
[DataMember]
public string Reference { get; set; }
[DataMember]
public double Rate { get; set; }
[DataMember]
public double DiscountedRate { get; set; }
}
잠시 머리를 긁적이며 StackOverflow 전체에서 다른 솔루션을 시도한 후 이 동작을 설명하는 piece of documentation을 파헤쳤습니다.
위의 내용을 염두에 두고 성공적으로 직렬화할 다음 페이로드를 얻었습니다.
다른 옵션이 있습니다
.NET에는 XmlSerializer 및 DataContractSerializer 두 개 이상의 XML 직렬 변환기가 함께 제공됩니다. 두 사람에 대해 많이 쓰여졌습니다. 이 항목article written by Dan Rigsby이 이 주제에 대한 최고의 정보원일 것입니다.
우리에게 중요한 차이점은
XmlSerializer
에 장식이 필요하지 않고 즉시 사용할 수 있다는 사실입니다. 동안DataContractSerializer
은 코드를 변경해야 합니다. 우리 프로젝트에서 모든 것이 이미 DataContract
로 설정되었으므로 아무 것도 변경할 필요가 없습니다.기본적으로 WebAPI 프로젝트는 활용하도록 구성됩니다
DataContractSerializer
. 그러나 문제가 발생할 경우 XMLSerializer
를 사용하도록 전환할 수 있음을 알면 도움이 됩니다.public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.XmlFormatter.UseXmlSerializer = true; // global setting for all types
config.Formatters.XmlFormatter.SetSerializer<ComplexObject>(new XmlSerializer(typeof(ComplexObject))); // overriding just for one type
설정 순서
ASP.NET XML 직렬화 문제를 처리하는 또 다른 옵션은 속성 순서를 명시적으로 정의하는 것입니다.
[DataContract(Name = "ComplexObject", Namespace = "")]
public class ComplexObject
{
[DataMember(Order = 1)]
public int Id { get; set; }
[DataMember(Order = 2)]
public string Name { get; set; }
[DataMember(Order = 3)]
public string Location { get; set; }
[DataMember(Order = 4)]
public string Reference { get; set; }
[DataMember(Order = 5)]
public double Rate { get; set; }
[DataMember(Order = 6)]
public double DiscountedRate { get; set; }
}
결론
XML 직렬화는 .NET이 시작된 이래로 사용되었습니다. 그리고 JSON이 인수한 것처럼 보일 수 있지만 XML은 곧 아무데도 가지 않을 것입니다. 필요할 때 대처할 수 있는 방법이 많다는 것을 아는 것은 좋은 일입니다.
Reference
이 문제에 관하여(ASP.NET XML 직렬화 문제: DataContractSerializer에 대한 관찰), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/timur_kh/aspnet-xml-serialisation-issues-observations-on-datacontractserializer-2o0n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)