問題タブ [nonserializedattribute]
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.
c# - 「NonSerialized」属性をクラス レベルで使用できないのはなぜですか? クラスのシリアル化を防ぐ方法は?
バイナリ シリアル化を使用してディープ クローンされたデータ オブジェクトがあります。このデータ オブジェクトは、PriceChanged などのプロパティ変更イベントをサポートします。
PriceChanged にハンドラーを追加したとします。コードが PriceChanged をシリアル化しようとすると、ハンドラーがシリアル化可能としてマークされていないという例外がスローされます。
私の代替案:
- シリアル化の前にイベントからすべてのハンドラーを簡単に削除することはできません
- すべてのハンドラーの依存関係も再帰的にマークする必要があるため、ハンドラーをシリアル化可能としてマークしたくありません。
- PriceChanged を NonSerialized としてマークしたくありません。ハンドラーを持つ可能性のあるこのようなイベントが数十あります。EDIT:これができないもう1つの理由は、データクラス(したがってイベント)が生成され、生成コードを直接制御できないためです。理想的には、生成コードはすべてのイベントを NonSerialized としてマークするだけです。
- 理想的には、.NET がその時点でオブジェクト グラフをたどるのをやめて、それを「リーフ」にすることを望みます。では、.NET でクラス全体を NonSerialized としてマークできないのはなぜでしょうか?
--
最終的に、ハンドラーに ISerializable を実装させ、シリアル化コンストラクター/ GetDataObject メソッドで何もしないことで、この問題を回避しました。ただし、ハンドラーは依然としてシリアル化されており、すべての依存関係が null に設定されているため、それも考慮する必要がありました。
クラス全体のシリアル化を防ぐより良い方法はありますか? つまり、null 依存関係を考慮する必要がないものですか?
c# - [OptionalField] と [NonSerialized] の違いは何ですか
トランセンダーでこの質問に出くわしました:
逆シリアル化中にフィールドの値が必要ない場合、フィールドに何を適用する必要がありますか?
Me = [NonSerialized]、ANSWER = [OptionalField]
私の腸の反応は NonSerialized でしたが、Transcender は私が間違っていると言います。[Nonseralized] 属性に関する限り、何に注意すればよいかはよくわかりますが、それでもこれを解決してほしいと思います。
私が知る限り、前者は同じアセンブリの新しいバージョンと古いバージョンの間のバージョン管理の競合と関係があります。後者は、フィールド FULLSTOP をシリアル化しないことに関心があります。この2つを際立たせる何かが他にありますか?MSDN は、XMLIgnoreAttribute を使用する XMLFormatter を使用して BinaryFormatters と SoapFormatter で使用されるため、これについてあまり言及していません。
2 番目の質問は、2 つの属性のいずれかを組み合わせて一致させることはできますか? 私はまだそれらを使用していません。
これを投げるだけですが、私の答えは [OnDeserialized] と IdeserilizationCallback インターフェイスが実装されている方法と関係がありますか?
アップデート:
オプションのフィールド属性はデータメンバーが保持する値をシリアル化しないことを知っていますが、NonSerialized はデータメンバーまたはその値をシリアル化しません。
c# - [Serializable] を使用しない場合の [NonSerialized] のメリット
私が取り組んでいるプロジェクトの既存のコードを調べていると、次のように実装されているクラスが見つかりました。
もっとこう見えていいんじゃない?
または、クラス自体がシリアライズ可能でない場合でも、[NonSerialized] を追加することには追加の利点がありますか?
.net - [NonSerialized]が自動実装されたプロパティで機能しないのはなぜですか?
なぜこれが許可されないのですか?
次のような回避策について知っています
- ISerializableの実装
- XmlSerializer/XmlIgnoreへの切り替え
- 手動で実装されたプロパティへの切り替え
問題は、具体的には、[NonSerialized]がプロパティでは許可されていないのに、フィールドでは許可されている理由です。
c# - XML シリアル化のパブリック アクセサーを使用して NonSerialized フィールドを指定する方法
XML シリアル化のパブリック アクセサーを使用して NonSerialized フィールドを指定するにはどうすればよいですか?
serialization - 複雑なオブジェクトによるワークフローSerializationException
次の例外が発生しました。
System.Workflow.Runtime.Hosting.PersistenceException:アセンブリ'Microsoft.SharePoint、Version = 12.0.0.0、Culture = neutral、PublicKeyToken=71e9bce111e9429c'でタイプ'Microsoft.SharePoint.SPWeb'はシリアル化可能としてマークされていません。—> System.Runtime.Serialization.SerializationException:アセンブリ'Microsoft.SharePoint、Version = 12.0.0.0、Culture = neutral、PublicKeyToken=71e9bce111e9429c'に「Microsoft.SharePoint.SPWeb」と入力してシリアル化可能としてマークされていません
エラーはここから来ました:
私が見つけた2つのブログ投稿があります:
この問題を解決する方法が1つあります。複雑なメンバーオブジェクトをグローバル変数としてではなく、ローカル変数として使用します。つまり、グローバルレベルではなくローカル(workflowProperties.Web)でSPWebを宣言します。
したがって、使用しているすべてのメソッドでspWebを再宣言する必要があります。これはかなり醜いと思います。
私も試したことはこれです:
==>これ以上のシリアル化例外はありません!
NonSerialized
このフィールドの属性を使用する場合、マイナスの影響はありますか?
言い換えれば、その意味は何ですか?
c# - インターフェイスを含む変更不可能なクラスをどのようにシリアル化しますか?
インターフェイスを含むオブジェクトをシリアル化しようとしています。ただし、インターフェイスはシリアル化できません。通常、NonSerialized
タグのようなものを使用しますが、事前定義された .NET クラス (例: ) の 1 つなど、変更できないクラスにこの属性を適用する方法がわかりませんSystem.Diagnostics.Process
。
たとえば、次のコードを考えてみましょう。
これにより、次の結果が出力されます。
システム クラスなど、変更できないクラスで次のいずれかを行う方法はありますか?
- シリアル化中に子要素を選択的に無視して、子要素がまったくシリアル化されないようにする
- ~と同じことを達成するもので要素をマークする
NonSerialized
リフレクションを使用して、シリアル化するクラスと同じメンバーをすべて含むクラスを動的に生成し、ある種のディープ コピーを実行し、それをシリアル化するなどの解決策を考えました。ただし、リフレクション ルートを生成するクラス以外に、このシリアル化タスクを達成する簡単な方法があるかどうかを知りたいと思っています。
file-upload - サーバーのシャットダウン時および起動時のエラー org.apache.struts.upload.CommonsMultipartRequestHandler$CommonsFormFile
Struts 1 アプリケーションを使用しています。
私のアプリケーションは、シャットダウンして起動するたびにエラーを表示します。サーバーのシャットダウンと起動の両方で、2 つの異なるが関連するエラーが見つかりました。
シャットダウンエラーは以下のようになります
そして、サーバーを再起動します:
このエラーは、EmailToClient
アクションがアクセスされたときに発生します。つまり、 にアクセスしたEmailToClient
後、サーバーのシャットダウン エラーが発生し、続いて起動時にエラーが発生しました。
EmailToClient
私のStrutsアプリケーションのフォームとアクションの名前です
誰か助けてください。誰かがエラーを分析し、何がうまくいかなかったかを予測できることを願っています。