問題タブ [servicestack-text]

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 に答える
361 参照

servicestack - HttpResult の ToOptimizedResult によって StackOverflow 例外が発生する

v3.9.56.0 を使用していますが、サービスからToOptimizedResult返された (自分のサービス ランナーから呼び出された)を呼び出すと、スタック オーバーフロー例外が発生しHttpResultます。さらに深く掘り下げると、例外が から来ていることがわかりましたJsonSerializer

返されるコードのスニペットは次のとおりです。

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

c# - ServiceStack の JSON デシリアライザーが無効な JSON を解析する

無効な JSON テキスト が与えられた場合、{ "foo" = "bar" }ServiceStack に組み込まれている JSON デシリアライザーは、これを次の DTO に正常にデコードします。

これは、C# のイニシャライザーのように見えるため、一部のユース ケースでは許容される可能性があります。JSON を実際に解析しないことは、このライブラリの機能です。

ただし、無効な JSON テキストを指定すると{ "foo" xxx "bar" }、エラーはスローされず、恐ろしいことに Foo プロパティが「xxx」に設定されます。

(a) JSON のみを解析するように ServiceStack.Text を構成する方法 (デフォルトで受け入れられる非標準のバリアントではなく)、または (b) アプリケーション レベルでシリアライザーをたとえば JSON.NET に置き換える方法はありますか?

編集: また、Web ルーティング コードに対する ServiceStack の逆シリアル化動作は、無効な解析でServiceState.Text.JsonSerializer返されるように見える動作とは異なるように見えます。default(T)

編集 2 (進行状況?):

このオプションを設定すると、ServiceStack は不正な形式の JSON に対して 400 Bad Request を返しますが、残念ながら JSON を指定された DTO に逆シリアル化することはできません。多分これは解決策の一部ですか?

解決:

ServiceStack のデフォルトの JSON シリアライザーをカスタムの "application/json" ハンドラーに置き換えて、JSON.NET シリアライザーをラップすると、問題が解決しました。以下の回答にソリューションコードのコピーを含めました。お役に立てば幸いです。

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

c# - servicestack deserializationToString を DTO 配列に使用すると、null オブジェクトがリストの最後にある

Visual Studio 2013でC#でコーディングしており、 ServiceStack 3.9.71を使用して JSON を逆シリアル化しようとしています。. それらはファイルに含まれており(私の管理下ではありません)、それを逆シリアル化しようとすると、最終的にDTOの正しい配列になりますが、配列の最後にnullオブジェクトがあります。ファイルの最後にあるキャリッジ リターン ("\r") に絞り込みました。私ができるいくつかの解決策は、文字列をトリミングするか、すべての「\ r」を削除するか、GIT で CRLF 自動スイッチを無効にして、コミットするときに非常に勤勉になることですが、それは「ハック」のように感じます。DeserializeFromString は、文字列の末尾にあるキャリッジ リターンを処理できるはずだと思います。明るい面では、OSX で同じコードを実行すると、ファイルが改行のみを使用し、改行と改行の組み合わせを使用しない Unix 形式になっているため、完全に正常に動作します。

他の誰かがこれを見たことがありますか?私が言及したもの以外に推奨される修正はありますか?

それを証明するために、簡単なテストを作成しました (Windows と OSX の両方で失敗します)。

私のDTO:

私のテスト:

結果:

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

c# - ServiceStack.Text.EnumMemberSerializer が Swagger プラグインで動作しない

ServiceStack v 3.9.71 とServiceStack.Text.EnumMemberSerializerアセンブリを使用して、列挙型を読み取り可能なテキストにシリアル化しています。

これはうまく機能し、列挙型の値は、 を使用して指定した名前にシリアル化されますEnumMemberAttribute

ただし、問題は、Swagger が私の名前を使用しないことです。私の推測では.ToString()、値ではなく列挙値でメソッドを呼び出すだけEnumMemberAttributeです。

シリアライゼーションを設定する順序は次のとおりです。(AppHost 内):

Swagger 機能が追加される前または後に enum シリアライザーが設定されているかどうかは問題ではないようです。

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

c# - ServiceStack.Text でオープン ジェネリック型のカスタム (デ) シリアライザーを設定することは可能ですか?

私はこのようなタイプを持っています:

ToJsonFoo<Bar>微調整では実現不可能な方法で、インスタンスを JSON にシリアライズしますJsConfig。また、ToJsonServiceStack.Text に依存してシリアライズします。Nestedこれは のインスタンスになる可能性がありますFoo<Baz>

残念ながら、JsConfig実装されている方法は、 forおよび other forJsConfig<T>の静的変数のセットがあることを意味します。また、AFAIK、ServiceStack.Text は、オープン ジェネリック型 (つまり、のようなもの) の JSON シリアル化を構成する方法を提供しません。この静的コンストラクターを作成して、この問題を解決しようとしました:Foo<Bar>Foo<Baz>JsConfig.Add(typeof(Foo<>), config)Foo<T>

これは常に機能するわけではありません。これは、静的コンストラクターがランタイムによって呼び出される順序によって異なります。どうやら、 ServiceStack.Text はシリアライザー関数をキャッシュし、API で操作が呼び出される順序に応じて、静的コンストラクターが呼び出される前にそれを実行することがあります。

JsConfig<Foo<T>>T は実質的に任意の型 (他のジェネリック型であっても) になる可能性があるため、事前にすべてのシリアライザーを設定することはできません。

ServiceStack.Text でオープン ジェネリック型 (ネストできる) のカスタム シリアル化ルーチンを定義することは可能ですか?

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

json - ServiceStack.Text: Linq と ConvertAll を使用する

ServiceStack.Text JsonObject パーサーを使用してドメイン モデルにマップしています。Linq を使用して ArrayObject をフィルタリングし、convertAll を使用して変換しようとする場合を除いて、基本的に何かが機能しています。リンクを使用した後、要素ごとに JsonArrayObjects リストに追加してから渡すことはできません。

質問: IEnumarable から JsonArrayObjects に戻すより洗練された方法はありますか? where は古いものを操作する代わりに要素をリストにコピーするため、キャストは機能しません。したがって、結果はダウンキャストされた JsonArrayObjects ではなく、新しい List オブジェクトになります。

一番

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

c# - デシリアライズ時にServiceStack JsonServiceClientがサイレントに失敗する

Expedia API との統合に取り組んでいます。私は ServiceStack に比較的慣れていませんが、これまでのところかなりうまく管理していますが、API からの JSON 応答の逆シリアル化で問題が発生し、JsConfig.ThrowOnDeserializationError有効にしているにもかかわらず失敗しているようです。

私が取り組んでいる API レスポンスを表示するには、次のリクエストを使用してください。

典型的な応答は次のとおりです。

私が本当に興味を持っているすべてのレート情報を除いて、応答の大部分は問題なくデシリアライズされています。より具体的には、ChargeableRateInfo を取り上げてみましょう。含まれるすべての値は null またはゼロです。

応答を逆シリアル化しようとしているクラスは次のとおりです。

これは、JSON の @ 記号と関係がある可能性があります。もしそうなら、どうすればこれを回避できますか?