1

C#のXMLSerializerでシリアル化属性を使用しないのはなぜですか。

http://msdn.microsoft.com/en-us/library/71s92ee1.aspx

ここでは、OrderedItemクラスはシリアル化されていません。理由は何ですか?

4

3 に答える 3

2

OrderedItem非常にシリアル化されています...「なぜ[Serializable]属性がないのですか?」という意味だと思います。もしそうなら、答えは単純です:シリアライザーはそれを要求しません。それetcによって要求されBinaryFormatterますが、彼らは少し異なることをしています-彼らはオブジェクトの内部状態をシリアル化しています。ただし、最近のほとんどのシリアライザーはそれをチェックしません。例:

  • XmlSerializer
  • DataContractSerializer(およびすべてのバリアント)
  • JavascriptSerializer
  • JSON.net
  • protobuf-net
  • と他のたくさん

基本的に、それは必要ではありません。おそらく重要な違いは、誤って(属性なしで)リモートBinaryFormatter境界を越えて不適切なデータを送信してしまい、大きな問題を引き起こす可能性があることです。

[Serializable]多くの「軽い」フレームワークは定義さえしていません。

于 2013-02-27T09:00:37.313 に答える
0

BinaryFormatterは[Serializable]属性を使用します。ただし、XMLSerializerはこれを必要としません。セラライザーを作成することによって

   XmlSerializer serializer = 
   new XmlSerializer(typeof(OrderedItem));

彼は、OrderedItemが実際にSerializableであると想定しています。

于 2013-02-27T08:59:35.570 に答える
0

私が見つけた説明は、たとえば、クラスをとしてマーク[Serializable]し、そのオブジェクトをシリアル化するとBinaryFormatter、そのクラスのインスタンスのプライベートメンバーもシリアル化されるため、そのクラスをシリアル化する必要があるかどうかを判断できるメカニズムです。全体として、またはXmlまたはJSシリアライザーを使用してシリアル化し、パブリックメンバーのみを取得します。

したがって、XmlSerializerを使用してシリアル化すると、パブリックメンバーのみがシリアル化されます。

于 2013-02-27T09:00:43.550 に答える