집 >백엔드 개발 >C#.Net 튜토리얼 >C# WCF DataContractSerializer 유형
원본 주소: 클릭하여 링크 열기
DataContractSerializer 클래스
제공된 데이터 계약을 사용하여 유형 인스턴스를 XML 스트림 또는 문서로 직렬화 및 역직렬화합니다. 이 클래스는 상속될 수 없습니다.
네임스페이스: System.Runtime.Serialization
어셈블리: System.Runtime .Serialization (System.Runtime.Serialization.dll에서)
설명
DataContractSerializer 클래스를 사용하여 유형을 변환합니다. XML 스트림이나 문서로 직렬화 및 역직렬화됩니다. 클래스에 DataContractAttribute 특성을 적용하고 클래스 멤버에 DataMemberAttribute 특성을 적용하여 직렬화할 속성과 필드를 지정할 수 있습니다.
문자 그대로의 의미는 데이터 계약 직렬화입니다. 이 문서에서는 주로 DataContractSerializer를 사용한 직렬화 및 역직렬화에 대해 설명합니다. DataContractAttribute, 이 기능은 열거형, 클래스 및 구조에만 사용할 수 있으며 인터페이스에는 적용할 수 없습니다. 봉인된 키워드를 통해 DataContractAttribute를 상속할 수 없다는 것을 알 수 있습니다. AllowMutiple 특성은 False입니다. 이는 하나의 DataContractAttribute 특성만 데이터 형식에 적용할 수 있음을 나타냅니다.
위의 DataContractAttribute 정의에서 DataContractAttribute에는 5개의 속성 멤버만 포함되어 있음을 알 수 있습니다. 그 중 Name과 Namespace는 데이터 계약의 이름과 네임스페이스를 나타내고 IsReference는 데이터 계약의 기존 참조를 유지할지 여부를 나타냅니다. 개체를 직렬화하는 동안 이 속성의 기본값은 False입니다.데이터 계약 멤버는 표시 선택 메커니즘을 채택합니다. 즉, DataContractAttribute 속성이 적용되는 데이터 유형의 속성/필드는 계약의 데이터 멤버를 자동으로 생성하지 않고 해당 속성/필드만 생성합니다. DataMemberAttribute 특성이 적용되는 데이터 계약의 구성원이어야 합니다.
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.Runtime.Serialization { // 摘要: // 指定该类型要定义或实现一个数据协定,并可由序列化程序(如 System.Runtime.Serialization.DataContractSerializer)进行序列化。 // 若要使其类型可序列化,类型作者必须为其类型定义数据协定。 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, Inherited = false, AllowMultiple = false)] public sealed class DataContractAttribute : Attribute { string name; string ns; bool isNameSetExplicitly; bool isNamespaceSetExplicitly; bool isReference; bool isReferenceSetExplicitly; // 摘要: // 初始化 System.Runtime.Serialization.DataContractAttribute 类的新实例。 public DataContractAttribute() { } // 摘要: // 获取或设置一个值,该值指示是否保留对象引用数据。 // // 返回结果: // 如果使用标准 XML 保留对象引用数据,则为 true;否则为 false。 默认值为 false。 public bool IsReference { get { return isReference; } set { isReference = value; isReferenceSetExplicitly = true; } } public bool IsReferenceSetExplicitly { get { return isReferenceSetExplicitly; } } // // 摘要: // 获取或设置类型的数据协定的命名空间。 // // 返回结果: // 协定的命名空间。 public string Namespace { get { return ns; } set { ns = value; isNamespaceSetExplicitly = true; } } public bool IsNamespaceSetExplicitly { get { return isNamespaceSetExplicitly; } } // // 摘要: // 获取或设置类型的数据协定的名称。 // // 返回结果: // 数据协定的本地名称。 默认值是应用了该属性的类的名称。 public string Name { get { return name; } set { name = value; isNameSetExplicitly = true; } } public bool IsNameSetExplicitly { get { return isNameSetExplicitly; } } } }
위에서 DataMemberAttribute에 적용된 AttributeUsageAttribute 속성 이 기능은 필드와 속성에만 적용 가능한 것 같습니다. 왜냐하면 이 두 요소만이 "데이터" 멤버이기 때문입니다. 네 가지 속성은 각각 다음과 같은 의미를 나타냅니다.
이름: 데이터 멤버의 이름, 기본값은 필드 또는 속성의 이름입니다.
Order: 최종 직렬화된 XML에서 해당 데이터 멤버가 나타나는 위치입니다. Order 값이 작을수록 테스트가 더 좋습니다.
IsRequired: 속성 멤버가 필수 멤버인지 여부를 나타냅니다. 기본값은 false이며, 이는 이 멤버가 기본값이 될 수 있음을 나타냅니다.EmitDefaultValue: 직렬화되는 필드 또는 속성의 기본값을 직렬화할지 여부를 지정하는 값을 가져오거나 설정합니다. 직렬화 스트림에서 멤버의 기본값을 생성해야 하면 true이고, 그렇지 않으면 false입니다. 기본값은 true입니다.
위 내용은 C# WCF DataContractSerializer 클래스의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!