18

C# では、インスタンスをシリアル化する場合、オブジェクトの型を属性XmlSerializerでマークする必要はありません。[Serializable]ただし、 などの他のシリアル化アプローチでは、クラスをまたはDataContractSerializerとしてマークする必要があります。[Serializable][DataContract]

シリアル化要件に関する標準またはパターンはありますか?

4

3 に答える 3

20

これは、XmlSerializer がパブリック フィールド/プロパティのみをシリアル化するためです。他の形式のシリアライゼーションでは、潜在的なセキュリティ リスクを構成するプライベート データをシリアライズする可能性があるため、属性を使用して「オプトイン」する必要があります。

于 2008-12-25T02:03:10.053 に答える
8

セキュリティだけが問題ではありません。簡単に言えば、シリアル化は特定のクラスに対してのみ意味があります。たとえば、「接続」をシリアル化するための snse はほとんどありません。確かに接続文字列ですが、接続自体ですか?いや。同様に、アンマネージ ポインター/ハンドルを必要とするものは、適切にシリアル化されません。代議員もそうではありません。

さらに、 (デフォルトでは)XmlSerializerおよびDataContractSerializer(デフォルトでは) はツリー シリアライザーであり、グラフ シリアライザーではありませんParent

シリアライザーの優先トークンでクラスをマークすることは、単に「意味があるはずです」と言う方法です。

IIRC と の両方は[XmlSerializer[DataContractSerializer] 、またはのような要求に対して非常に厳格でしが、最近はもう少しリベラルになりました。[Serializable][DataContract][IXmlSerializable]

于 2008-12-26T08:34:22.260 に答える
4

現在、.Net Framework には 3 つの形式のシリアル化があります。

  1. XmlSerialization - デフォルトでは、パブリック フィールドとプロパティで機能します。XmlElementAttribute、XmlAttributeAttribute などを介して引き続き制御できます ...
  2. BinarySerialization - SerializationAttribute によって制御されます。CLR に深く統合
  3. WCF シリアル化 - DataContractAttribute など ...

残念ながら、シリアル化には標準的な全体的なパターンがあります。3 つのフレームワークにはすべて、異なる要件と癖があります。

于 2008-12-25T15:21:22.440 に答える