7

XmlSerializer を取得して、クラスまたは構造体のプライベートおよび "public const" プロパティもシリアル化する最も簡単な方法は何ですか? 私のために出力されるのは、公開されているものだけではありません。プライベートにするか const を追加すると、値がシリアル化されません。

4

6 に答える 6

17

XmlSerializerパブリックフィールドとプロパティのみを調べます。さらに制御が必要な場合は、IXmlSerializableを実装し、必要に応じてシリアル化できます。もちろん、定数に逆シリアル化することはできないため、定数をシリアル化してもあまり意味がありません。

于 2009-01-09T19:43:54.207 に答える
10

プライベート プロパティをシリアル化することはできませんが、次のように内部セッターを使用してプロパティをシリアル化できます。

public string Foo { get; internal set; }

これを行うには、sgen.exe を使用してシリアル化アセンブリを事前に生成し、このアセンブリを friend として宣言する必要があります。

[assembly:InternalsVisibleTo("MyAssembly.XmlSerializers")]
于 2009-07-28T21:47:21.270 に答える
4

.NET3.0で導入されたDataContractSerializerを確認してください。また、XML形式を使用しており、プライベートデータの処理を含め、多くの点でXmlSerializerよりも優れています。完全な比較については、http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/を参照してください。

.NET 2.0しかない場合は、プライベートデータを処理できるBinarySerializerがありますが、もちろんそれはバイナリ形式です。

于 2009-01-09T19:45:36.200 に答える
2

constメンバーはインスタンスごとではないため、メンバーを考慮することは意味がありません。ただし、非パブリック インスタンス メンバーだけを意味する場合: DataContractSerializer(.NET 3.0) を検討してXmlSerializerください。

詳しくはこちらをご覧ください。

于 2009-01-09T20:16:15.063 に答える
0

Newtonsoft.Json を使用するもう 1 つの解決策:

   var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { root = result });
   var xml = (XmlDocument)Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json);

確かに、これは残念ながらjson経由で迂回しています。

于 2016-04-14T08:52:03.080 に答える