ホームページ  >  記事  >  バックエンド開発  >  C# WCF DataContractSerializer クラス

C# WCF DataContractSerializer クラス

黄舟
黄舟オリジナル
2017-02-15 11:28:381319ブラウズ

元のアドレス: クリックしてリンクを開きます

DataContractSerializer クラス

は、提供されたデータ コントラクトを使用して、型インスタンスを XML ストリームまたはドキュメントにシリアル化および逆シリアル化します。このクラスは継承できません。

名前空間: System.Runtime.Serialization

アセンブリ: System.Runtime.Serialization (System.Runtime.Serialization.dll 内)

備考

DataContractSerializer を使用するクラスを使用して、型インスタンスを XML ストリームまたはドキュメントにシリアル化および逆シリアル化します。 DataContractAttribute 属性をクラスに適用し、DataMemberAttribute 属性をクラス メンバーに適用することで、シリアル化するプロパティとフィールドを指定できます。

文字通りの意味: データ コントラクトのシリアル化 この記事では主に、DataContractSerializer と DataMenmberAttribute

を使用したシリアル化と逆シリアル化について説明します。 DataContractAttribute

適用されたAttributeUsageAttribute属性から判断DataContractAttribute に対して、この属性は列挙型、クラス、および構造体にのみ使用でき、インターフェイスには適用できないことが、キーワード sealed からわかります。 AlwaysMutiple 属性は False で、1 つのデータ型に適用できる DataContractAttribute 属性は 1 つだけであることを示します。


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 属性から、この属性はフィールドと属性にのみ適用できます。これら 2 つの要素だけが「データ」メンバーであるためです。 4 つの属性はそれぞれ以下の意味を表します。


名前: データメンバーの名前。デフォルトはフィールドまたは属性の名前です。

    Order: 最終的なシリアル化された XML 内で対応するデータ メンバーが表示される位置。 Order 値が小さいほど、より正確になります。
  • 属性メンバーかどうかを示します。は必須のメンバーです。デフォルト値は false で、このメンバーをデフォルトにできることを示します。
  • EmitDefaultValue: シリアル化されるフィールドまたはプロパティのデフォルト値をシリアル化するかどうかを指定する値を取得または設定します。メンバーのデフォルト値をシリアル化ストリームで生成する必要がある場合は true、それ以外の場合は false。 デフォルト値は true です。
  • ソースコードソース: クリックしてリンクを開きます

上記は C# WCF DataContractSerializer クラスの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。