問題タブ [scriptignore]
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# - [ScriptIgnore] を 1 回だけスキップする
この状況の環境:
としてマークアップされたフィールドを含めると便利な状況に遭遇しました[ScriptIgnore]
。フィールドを属性なしのままにしておくと、循環参照が構成され、例外がスローされます。理由は次のようなものです。
ここでわかるように、 にFoo
は多くの が関連付けられていBars
ます。そして aBar
には が関連付けられていFoo
ます。
状況に戻ります。include ステートメントを使用して、この関連付けをコントローラーにロードしています。
include は[ScriptIgnore]
注釈の影響を受けないため、スローされるエラーはありません。デバッグ時に検査すると、関連付けが適切に構築されます。のリストがありfoos
、それぞれfoo
に の関連リストがありBars
ます。
ここで、この構築されたリストをシリアル化したいと思います。データでいっぱいになるビューモデルがあります。次のようになります。
したがって、このビューモデルをビューに渡してシリアル化します。
例外はスローされませんが、シリアライゼーションは でBars
マークされたフィールド ( ) を適切にスキップし[ScriptIgnore]
ます。調べconsol.log(fooViewModel)
てみると、 の配列があることは明らかですが、 のいずれにもFoo
の関連する配列はありません。Bar
Foos
[ScriptIgnore]
このタグを一度だけスキップする方法はありますか? 毎回スキップした場合、シリアライザーは Foo をシリアル化し、Bar 型のコレクションを見て確認し、各 Bar をシリアル化し、Bar に関連付けられた Foo があることに気付き、Foo をシリアル化し、Foo に Bar 型のコレクションがあることに気付きます.. 。等。Bar
初めてのコレクションだけをつかみたい。これを達成する方法はありますか?Foo
Barからシリアル化しようとしますが、空になります。これはすべて熱心な読み込みで行われ、オブジェクト グラフ全体が既に構築されています。
c# - JavaScriptSerializerに[ScriptIgnore]タグを無視させる方法は?
JavaScriptSerializer[ScriptIgnore]
にタグを無視させる必要があります。カスタムJavaScriptConverterでこれを行うことができると思います。しかし、よくわかりません。私がする必要があるのは属性を無視することだけであり、残りは基本定義で行うことができます。あなたはここのコードをJavaScriptSerializer
見ることができます。
この例のようなカスタムコンバーターを実装すると、複雑なカスタムオブジェクトグラフが適切にシリアル化されなくなるのではないかと心配しています。
JavaScriptSerializer用のMicrosoftのコードを振り返ると252-253
、コードは次のようになります。
私が本当にバイパスする必要があるのはこの部分だけです。そのコード行をコメントアウトする必要があります。残念ながら、それは実際には不可能なので、プロセス全体のその一部を無視できるようにするための何らかの方法が必要です。
[ScriptIgnore]
そのコード行を無視するにはどうすればよいですか、または属性を無視しないカスタム実装を提供するにはどうすればよいですか?
c# - ScriptIgnoreがWCFRESTサービスアプリケーションで機能しない
Visual Studio WCF Rest Service Applicationプロジェクトを開始しました。このプロジェクトでは、シリアル化されたオブジェクトを含むJson形式のメッセージを返すサービスが必要であり、オブジェクトの一部のフィールドがシリアル化されないようにします。WCFに関する私の知識は非常に基本的であり、必要なものをすばやく実装するための簡単な方法であるため、VisualStudioのRestServiceApplicationプロジェクトを使用したことを言わなければなりません。
これが私が持っているオブジェクトだとしましょう:
そしてこれは私のコードです
私がしなければならないことは、シリアル化したくないプロパティに[ScriptIgnore]属性を割り当てることだということをどこでも読んだことがあります。しかし、私がそうすると、それは機能しません。とにかくシリアル化してもらいます。
私がやりたいことを達成した唯一の方法は、この方法で返したいオブジェクトを宣言することです。
このようにして、クラスを必要に応じてシリアル化します。しかし、私はこのことを正しくやっていないかもしれないので、それは私を大いに悩ませます。私はこれを正しくやっていますか?
c# - Asp.net ScriptIgnore 属性が機能しない
これが私のPOCOクラスです:
AのオブジェクトをJsonにシリアライズしたい。しかし、POCO プロキシ オブジェクトをシリアル化しようとすると、循環参照例外が発生し続けます (ただし、POCO オブジェクトでは機能します)。Google で検索したところ、.Net 4.5 で ScriptIgnore 属性が機能するはずであることがわかりました。しかし、私は.Net 4.5を使用していますが、明らかに機能していません。誰かがこれを解決する方法を教えてもらえますか?
asp.net-mvc - ScriptIgnore 属性が部分クラスで機能しない
部分ビューで ScriptIgnore タグを使用してプロパティのシリアル化を停止するのに問題があります。
var docs = @Html.Raw(Json.Encode(モデル))
面白いことに、.tt ファイルの部分クラスに属性を直接追加すると期待どおりに動作するのですが、code-gen を実行するとそのファイルが上書きされるため、MetadataType を使用してみました
「DocumentCategory」タイプのオブジェクトをシリアライズ中に循環参照が検出されました。
DocumentCategory には階層データが含まれているためです。
どんな助けでも大歓迎です!
トライブ84
c# - 継承クラスの [ScriptIgnore] 属性を無視する
プロパティに ScriptIgnore 属性がある基本クラスがあります。
Base クラスから継承する別のクラスもあります。
Name プロパティをオーバーライドしようとしましたが、まだシリアル化されていません。ScriptIgnore 属性をオーバーライドする方法はありますか (継承クラスでは無視します)。