元のアドレス: クリックしてリンクを開きます
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 に適用される上記の AttributeUsageAttribute 属性から、この属性はフィールドと属性にのみ適用できます。これら 2 つの要素だけが「データ」メンバーであるためです。 4 つの属性はそれぞれ以下の意味を表します。
名前: データメンバーの名前。デフォルトはフィールドまたは属性の名前です。
上記は C# WCF DataContractSerializer クラスの内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。