問題タブ [xmlignore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
6948 参照

.net - XmlIgnoreAttribute、シリアル化中にのみ使用され、逆シリアル化中には使用されませんか?

私は.NETXmlIgnoreAttributeを理解していますか?

XmlSerializerのSerializeメソッドに、パブリックフィールドまたはパブリック読み取り/書き込みプロパティ値をシリアル化しないように指示します。

それ:

  • XMLファイルに存在する場合、プロパティは逆シリアル化されますか?
  • プロパティは新しいXMLファイルにシリアル化されませんか?

私が尋ねている理由は、ファイル内のプロパティを、より多くのオプションを備えた新しいプロパティに置き換えたためです。古いプロパティは単純なブールプロパティであり、新しいプロパティは列挙型です。新しいプロパティを追加する前の古いプロパティの意味に従って、新しいプロパティの値をブール値に変換するように古いプロパティを変更しました。getとsetの両方が実装されています。

これにより、新しいプロパティを設定する古いプロパティを読み取ることで新しいファイルをサイレントにアップグレードでき、シリアル化時に新しいプロパティが追加されました。

ただし、古いプロパティを新しいxmlファイルから削除したいので、タグを付けたらどうなるのか[XmlIgnore]、古いxmlファイルは引き続き適切に逆シリアル化されてファイルからそのプロパティを読み取るのか、それとも完全に無視されるのか疑問に思いました。 ?

そうでない場合、次の変更は私が望むことをしますか?

これにより、すべての新しいオブジェクトに対してfalseが返されます。これは、デフォルト値を指定したため無視されます。古いファイルに存在し、trueに設定すると、重要な新しいプロパティであるListHandlingプロパティが変更されます。

編集:テストの結果、両方のアプローチが私が望むことを実行しているように見えることを確認しました。ただし、上記の最初の動作が単なる実装の詳細なのか、それともドキュメントがそのように理解できるのかを知りたいので、質問は残しておきます。

0 投票する
1 に答える
2939 参照

c# - 基本クラスを使用した System.Xml.Serialization.XmlIgnoreAttribute について

以下に示す2つのクラスがあります。

のインスタンスをシリアル化するとSomeDerived、 の値が表示されるとは思われませんSomeProperty。しかし、私はそうします。SomePropertyas で宣言してvirtualinSomeBaseでオーバーライドするなど、他のアプローチを試しましたSomeDerived。それでも、のシリアル化されたインスタンスに表示されますSomeDerived

で何が起こっているのか誰でも説明できますXmlIgnoreAttributeか?

完全を期すために、私の逆シリアル化コードは以下のとおりです

編集

シリアライザの宣言を に変更すると、同じ動作になりnew XmlSerializer(typeof(SomeDerived))ます。

0 投票する
1 に答える
670 参照

c# - 特定の型のすべてのメンバーを動的に無視する方法

それらのメンバーが例外を引き起こすため、シリアル化中に Dictionary のすべての要素を無視したい

クラスの例:

私が試したこと(失敗)

0 投票する
1 に答える
4742 参照

c# - C# 属性 XmlIgnore および XamlWriter クラス - XmlIgnore が機能しない

Brush MyBrushとしてマークされたプロパティを含むクラスがあります[XmlIgnore]。それにもかかわらず、ストリームでシリアル化されているため、を介して読み取ろうとすると問題が発生しますXamlReader

プロパティの可視性を(内部に)変更すると、ストリームに表示されなくなります。残念ながら、特定のシナリオではこれを行うことはできません。

  1. 誰かが同じ問題を抱えていましたか?
  2. これを回避する方法はありますか?

備考: 私が知る限り、C# 4.0

これは、以下をテストする単体テストのメソッドですXamlSerialization

私のクラスの 1 つで、私は Property を使用しBrushます。Brush上記のコードでは、オブジェクト (シリアル化できない) が値であるため、この単体テストは失敗します。Setter を削除すると (以下のように)、単体テストに合格します。

XmlWriter(基本的に上記と同じテスト)を使用すると機能します。では、 Setter が存在するときにシリアル化され、削除されたときにシリアル化されていないStringBuffer sbことがわかりますProperty Brush(おそらく、Setter がないためにプロパティを無視する別のチェック)。のその他のプロパティ[XmlIgnore]は、意図したとおりに無視されます。

0 投票する
3 に答える
9994 参照

c# - XmlIgnoreが機能しない

シリアル化しようとしているオブジェクトがあり、出力は次のようになります。

ここで、Item はクラス ルートが使用するクラスです。

場合によっては、値の値を無視したいのですが、このコードがあります

ただし、値は引き続き出力に書き込まれます。

私は何を間違っていますか?

0 投票する
1 に答える
187 参照

asp.net-mvc-3 - MVC3 アプリケーション

私はMVC3アプリケーションに取り組んでいます。ADO.NET DbContext Generator を使用して POCO クラスを作成し、部分クラスを使用してプロパティの検証を追加しています。ここで、エンティティの 1 つをシリアル化しようとすると、次のエラーが表示されます。

「タイプ 'System.Collections.Generic.ICollection`1[..... のメンバー .... をシリアライズできません」

このエラーをググったところ、 [XmlIgnore]特定のプロパティにタグを追加できることがわかりました。ただし、ポイントは、ジェネレーターによって毎回作成されるため、プロパティにこのタグを付けることはできないということです。では、どうすればこれをより簡単な方法で行うことができますか?

0 投票する
2 に答える
973 参照

c# - XML シリアル化で null 値を無視する

次のようなxmlがあります

ご覧のとおり、SubscriptionProductIdentifierType はコレクションであり、この場合は 1 つのアイテムしか含まれていません。
2 番目の空の項目を無視するにはどうすればよいですか?

xml ignore を追加しようとしましたが、コレクション全体が削除され、データがない場合はコレクション内の 2 番目の項目のみを削除したいと考えています。

どんな助けでも大歓迎です。

敬具 ザル

0 投票する
3 に答える
10974 参照

c# - 入れ子になったプロパティで XmlAttributeOverrides を使用する

XmlAttributeOverrides を使用して、クラスがシリアル化された後に xml に表示されるクラス プロパティを制御しようとしています。「ルート」クラスにあるプロパティでは機能しますが、ネストされたプロパティでは機能しません。これは、私が達成しようとしていることを説明するための簡単な例です。

私のクラス階層は次のとおりです。

Main() をシリアル化すると、次のようになります。

私ができることは、これを使用して名前またはアドレスのいずれかが表示されないようにすることです。

私ができるようにする必要があるのは、Main.Address.ContactInfo が時々シリアル化されないようにすることです(空の場合)。次のことを試しましたが、うまくいきませんでした。

と...

XPath ステートメントを使用して対象の属性名を指定するなど、実際にはもっと多くのことを試しましたが、失敗した試みでこのページを埋めたくありませんでした。私が求めていることは、この方法でも可能ですか?

0 投票する
1 に答える
1580 参照

c# - シリアル化でのみ XmlIgnore

PasswordEncryptorEncodeエンコードするメソッドを呼び出すクラスです。Passwordがエンコードされた後、XmlSerializerディスク内のファイルにシリアル化されます。ただし、プログラムが起動するたびに、ファイルは逆シリアル化されset、で再PasswordEncryptor.Encode()エンコードPasswordされます。[XmlIgnore]逆シリアル化でのみできる方法はありますか?