>  기사  >  백엔드 개발  >  C# WCF DataContractSerializer 유형

C# WCF DataContractSerializer 유형

黄舟
黄舟원래의
2017-02-15 11:28:381309검색

원본 주소: 클릭하여 링크 열기

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



위에서 DataMemberAttribute에 적용된 AttributeUsageAttribute 속성 이 기능은 필드와 속성에만 적용 가능한 것 같습니다. 왜냐하면 이 두 요소만이 "데이터" 멤버이기 때문입니다. 네 가지 속성은 각각 다음과 같은 의미를 나타냅니다.


이름: 데이터 멤버의 이름, 기본값은 필드 또는 속성의 이름입니다.

Order: 최종 직렬화된 XML에서 해당 데이터 멤버가 나타나는 위치입니다. Order 값이 작을수록 테스트가 더 좋습니다.

IsRequired: 속성 멤버가 필수 멤버인지 여부를 나타냅니다. 기본값은 false이며, 이는 이 멤버가 기본값이 될 수 있음을 나타냅니다.


EmitDefaultValue: 직렬화되는 필드 또는 속성의 기본값을 직렬화할지 여부를 지정하는 값을 가져오거나 설정합니다. 직렬화 스트림에서 멤버의 기본값을 생성해야 하면 true이고, 그렇지 않으면 false입니다. 기본값은 true입니다.

  • 소스코드 소스 : 링크를 클릭하시면 열립니다

  • 위 내용은 C# WCF DataContractSerializer 클래스의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.