問題タブ [deserialization]

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 投票する
4 に答える
104225 参照

java - Jackson JSON ライブラリ: 抽象フィールドを含むクラスをインスタンス化する方法

JSON 文字列を Java オブジェクトに変換したいのですが、このオブジェクトのクラスには、Jackson がインスタンス化できない抽象フィールドが含まれており、オブジェクトを生成しません。次のような抽象クラスのデフォルトの実装について伝える最も簡単な方法は何ですか?

または、JSON 属性名に基づいて実装クラスを決定します。JSON オブジェクトの場合:

私はただ嘆くでしょう:


Jackson で JSON 内にクラス情報を埋め込むことが可能であることはわかっていますが、使用する JSON 形式を複雑にしたくありません。デフォルトの実装クラスを設定するだけで、または属性名(「cat」)で使用するクラスを決定したい-XStreamライブラリのように、次のように記述します:

特に1行でそうする方法はありますか、それとももう少しコードが必要ですか?

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

c# - オブジェクトのシリアル化のための C# メタ情報

dataさまざまな情報を含む というオブジェクトがあるとします。data議論のために、グラフ内には実際にはかなり多くのものがあるとしましょう。

を使用してシリアル化するBinaryFormatterと、たとえば 5Mb のファイルが得られます。シリアライゼーション ストリームを にカプセル化するとGZipStream、はるかに小さなファイル、たとえば 1Mb が得られます。

必要に応じて、ストリームを圧縮しながら暗号化することも、ストリームを圧縮せずに暗号化することもできます。

問題は、デシリアライズするときに何をすべきかを知るために、シリアライズ中に何が行われたかを知る必要があることです。

1 つの手法は、別のファイル拡張子を使用することです。たとえば、圧縮も暗号化もされていないファイルの拡張子は、.dat で、圧縮されている場合は .zdat、暗号化されている場合は .cdat、圧縮および暗号化されている場合は .czdat になります。

これは機能しますが、潜在的な問題が発生します。ユーザーが拡張子を変更した場合などです。これは、Windows でファイルを関連付ける場合、関連付ける必要がある拡張子が 1 つではなく 4 つあることも意味します。既存の関連付けとの衝突のリスク。

データ オブジェクトを単純なクラスでラップすると、次のようになります。

次に、基本的に、圧縮および/または暗号化される可能性のあるシリアル化されたストリームを持つオブジェクトをシリアル化していますが、メタ情報は に保存されているため、この時点ではわかりませんSerialisationContainer

どう思いますか?私は基本的に、あなたがこの方法についてどう思うか、また同様の状況であなたが何をしているのかに興味があります. 上記の方法は、私がやりたいことをするのに非常に無駄な方法だと思います。基本的に、データ グラフをメモリ ストリームにシリアル化し、それを文字列に変換し、その文字列をコンテナー内に配置してから、再度シリアル化する必要があります。

もう 1 つの問題は、長さですstring SerialisedData。私が示した例では、約 5Gb の BinaryData しかありませんが、それが大きくなり始めるとどうなるでしょうか? 64 ビット OSでの上限stringは約 2GB で、32 ビット OS ではそれよりも大幅に少ないことがわかっています。ストリームにはそのような制限がありますか? ストリームはバイトのブロックで書き込まれるため、そうしないのは理にかなっています。

0 投票する
6 に答える
139180 参照

c# - JavaScriptSerializer() を使用した JSON ファイルのデシリアライズ

逆シリアル化する json ファイルの構造は次のようになります。

JavaScriptSerializer のプロパティとしてファイル名を持つクラスを作成しました。json を逆シリアル化するために使用するコードは次のとおりです。

私の問題は、json ファイルのユーザー フィールドを読み取る方法です。以下のようなものです。

サブプロパティと値があります。Response クラスでどのように名前を付けることができますか。私の応答クラスは次のようになります。

それを行うのに最適なケースは何ですか?

0 投票する
0 に答える
2178 参照

c# - SAP Web サービス クライアント - 逆シリアル化に失敗しました

Sap WebSvc の最新の参照を受け取る単純な Net WebSvc クライアントを作成しました。String と、参照によって送信される 4 つの要素が必要です。カスタム オブジェクトの 3 つの配列と、コレクション構造の外部にある別のカスタム オブジェクト (参照ページに形式があります)

操作を実行する要求が呼び出されると、呼び出し行で SoapException "Deserialization failed" が発生します。(一番下に、コードの抜粋、呼び出す Reference.cs メソッド、およびエラーを可能な限り完全に記述します。 )

ネットで調査したところ、このエラーを示す一般的な問題はメンバー変数名の更新されていない wsdlとアンダースコアであると誰かが答えている SAP フォーラムのスレッドを見つけましたが、どちらも私の場合ではありません。実際、スレッドは続きましたが、私と同じ問題を抱えている人への応答はありませんでした.

とにかく、StackOverflowの人たちはそれよりもアクティブだと思います;-)

よろしくお願いします!


私のコードの抜粋:

そして、これは私の Web サービスReference.cs 添付メソッドです。

エラー:

System.Web.Services.Protocols.SoapException

未処理だった

Message="デシリアライズに失敗しました"

ソース="System.Web.Services"

Actor="" Lang="en" Node=""

Role="" スタックトレース:

メッセージ、WebResponse 応答、ストリーム

responseStream、ブール asyncCall)

methodName、Object[] パラメータ)

Destino、ZtyEE070[]& EtRequestHeader、

ZtyEE071[]& EtRequestObj、Zclrqstdat

IClrqst、Zrequest[]& TRequest) で

D:\Documents and Settings\apacay\My

ドキュメント\Visual Studio

2005\プロジェクト\デサローロ

SCM\scm.manager\SCM.Manager\Web

References\mx.com.hylsamex.hmxwasd1\Reference.cs:85行目

D:\Documents and Settings\apacay\My

ドキュメント\Visual Studio

2005\プロジェクト\デサローロ

SCM\scm.manager\SCM.Manager\SAPDataMockUp.cs:164行目

D:\Documents and Settings\apacay\My にあります

ドキュメント\Visual Studio

2005\プロジェクト\デサローロ

SCM\scm.manager\SCM.Manager\Threads\HandleSap.cs:24行目

D:\Documents and Settings\apacay\My にあります

ドキュメント\Visual Studio

2005\プロジェクト\デサローロ

SCM\scm.manager\SCM.Manager\Front.cs:170行目

アセンブリ、文字列 [] 引数)

アセンブリファイル、証拠

assemblySecurity、String[] args)

executionContext、ContextCallback

コールバック、オブジェクトの状態)

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

java - フィールドの逆シリアル化の前後にいくつかのロジックを実行する(注釈または別の方法を使用した)jackson json戦略はありますか?

POJOのフィールドで各逆シリアル化が実行された後、いくつかのコードを実行する必要があります。ジャクソンアノテーション(または他の)戦略を通じてこれを行う方法はありますか?

  1. これを行う1つの方法は、PostLogicDeserializerInterfaceを実装するか、PostLogicDeserializerAbstractを拡張する、フィールドタイプごとにカスタムデシリアライザーを作成することです。ただし、これにより、(@ JsonPropertyを使用するだけでなく)保守が困難な大量のコードが乱雑になります。ですから、これは良い考えではないと思います。

  2. @JsonDeserializeはクラスレベルで使用できますが、値クラスにのみ使用できることがわかりました。ドキュメントから:

値クラスに注釈を付ける場合、構成は値クラスのインスタンスに使用されますが、より具体的な注釈(メソッドまたはフィールドにアタッチする注釈)によってオーバーライドできます。

ですから、これもうまくいかないと思います。

  1. POJOのセッターメソッドでカスタムロジックを使用することは悪い習慣です。反対に、ジャクソンはリフレクションを使用してフィールドを設定していると思います...どちらも良い戦略ではありません。

私の目標は、デシリアライザーによって設定されたフィールドのパーセンテージを決定することです。呼び出された逆シリアル化(入力されたフィールド)ごとに増加するカウンターが必要になります。そして、クラス(POJO)の逆シリアル化全体が終了したら、リフレクションを使用していくつかのロジックを実行する必要があります。

私が今それを実装している方法は、

  • ジャクソンマッパーによってPOJOを逆シリアル化したら、リフレクションを使用して各フィールドを調べます
  • 設定されているかどうかを確認し、nullの場合はfi、プリミティブ番号(以前の初期値)の場合は-1を確認します。(このアプローチの1つの欠点は、ブール値が設定されているかどうかを確認できないことです)
  • 他の種類のチェックにリフレクションを使用します(ロジックXと呼びます)
  • セットフィールドとロジックXのパーセンテージに依存するロジックを実行します。

POJOをリフレクションでチェックする必要がないので、ジャクソン戦略を好むでしょう。それはむしろその場で行われることを望みます(POJOが逆シリアル化されるとき)。

乾杯、
デスポット

0 投票する
5 に答える
31754 参照

.net - JSON.NETを使用してネストされた/再帰的なディクショナリとリストに逆シリアル化するにはどうすればよいですか?

JSONを認識しないコードで使用するために、複雑なJSONBLOBを標準の.NETコンテナーに逆シリアル化する必要があります。具体的には、標準の.NETタイプであるDictionary<string, object>List<object>、「オブジェクト」がプリミティブまたは再帰(辞書またはリスト)であることが想定されます。

静的タイプを使用して結果をマップできず、JObject/JTokenが適合しません。理想的には、生のJSONを基本的な.NETコンテナーに変換する方法があります(おそらくコントラクトを介して?)。

JSON.NETデシリアライザーが「{}」または「[]」に遭遇したときにこれらの単純な型を作成するように誘導する方法を探しましたが、ほとんど成功しませんでした。

助けていただければ幸いです。

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

json - lift-jsonを使用してJson値をマップとして抽出します

lift-jsonのドキュメントは、現在のJObject構造をバニラスカラマップとして取得するために「values」を呼び出すことができるはずであることを示唆しています。例が示すように、「values」の戻りタイプはMapではなくjson.Valuesであるため、このアプローチは私には機能しません。私は何が間違っているのですか?この変換を実行するために必要な暗黙のインポートはありますか?

0 投票する
0 に答える
242 参照

c# - sxd2Code で生成されたコードは、VA2008/VS2010 で実行すると xml ファイルを適切に逆シリアル化しますが、cmd から実行するとそうではありません

xsd2code を使用して C# で対応するクラスを生成するために使用したスキーマ ファイルがあります。VS2010 デバッガーでアプリケーションを実行すると、xml ファイルからすべてのデータが取得されますが、cmd から .exe を実行すると、一部のデータが読み込まれません。なぜ、またはその理由を見つける方法はありますか?

そのため、デバッガーから実行すると、常に雇用履歴が読み込まれますが、Windows タスクとして実行すると、雇用履歴がまったく取得されません。

ありがとう、ジェニー

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

asp.net - このJSONが「無効なJSONプリミティブ」として返されるのはなぜですか?

次のJSONは逆シリアル化されていません。これは明らかに、DECIMALSがJSONを保存するためです。これを修正するにはどうすればよいですか?

この最初のJSONはサーバーからのものであり、有効です。

サーバーに送信されるこの後続のJSONは失敗します:
ユーザーがフォームを編集すると、データはクライアント側でシリアル化されて返送されます...ここで、JSONの逆シリアル化を試みると失敗します。

このコードはエラーをスローします:

スローされるエラーは次のようになります。

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

asp.net - この XML に IXmlSerializable を実装するのを手伝ってください

XML は次のとおりです。

私はDTOを次のように持っています: