ServiceStackサービスは、JsonとXMLの両方として動的応答オブジェクトを返すことができません

トーマス・ノーガード

外部サービスから動的なjsonデータのセットを組み合わせて返すサービスを構築しました。データをjsonとして返すことは問題ありませんが、XML ...

DTOの文字列プロパティで(JsonConvert.DeserializeXNodeを使用して)生のXMLとして返そうとしましたが、最終的なServiceStack応答で、文字列内のxml文字がエスケープされます。

データを動的/オブジェクトとして返そうとしましたが、jsonは問題ありませんが、XMLは多くのDataContractSerializerランタイムエラーをスローします。

これは、おそらく単純なことで、私を壁に押し上げています。同じサービス/操作(Acceptヘッダーに応じて)によって動的データがjsonとxmlの両方として返される例を誰かが投稿できますか?

みんなありがとう。

神話

ServiceStackは、デフォルトで.NETのXMLDataContractSerializerを使用してDTOをシリアル化します。それが不適切な場合は、独自のXMLコンテンツタイプシリアライザー登録してXMLシリアル化を引き継ぐことができます。これには、ServiceStackのデフォルトのDataContractSerializerを置き換えて.NETのXmlSerializerを使用する例が含まれています

DTOの文字列プロパティで(JsonConvert.DeserializeXNodeを使用して)生のXMLとして返そうとしましたが、最終的なServiceStack応答で、文字列内のxml文字がエスケープされます。

これは正しくありません。ServiceStackでは、応答直接書き込む生のXMLなど、多数の生のデータ型返すことができます。string応答OutputStreamに書き込んだ後に何か他のものがエスケープされる可能性があります(Webサーバーやクライアントなど)が、 ServiceStackではありません。

XMLシリアル化を制御する別の戦略は、DataContractまたはXmlSerializer属性で注釈が付けられたDTOにそれらをコピーすることです。これにより、XMLのシリアル化方法を制御できますが、動的データでは面倒です。XMLは、.NETの汎用のシリアル化としては一般的に不適切な選択です。データコレクションは醜いXMLを生成します。

コンテンツタイプ固有の実装

この1つのサービスのXMLのみを処理する必要がある場合は、デフォルトのXMLシリアライザー実装をオーバーライドする代わりに、ServiceStackのコンテンツタイプ固有の実装を使用してXML要求を異なる方法で処理できます。

public class MyServices : Service
{
    // Handles all other unspecified Verbs/Formats
    public object Any(MyRequest request) => ...;

    // Handles any XML Requests
    public object AnyXml(MyRequest request)
    {
        var dto = Any(request);
        string xml = CustomXmlSerializer(dto);
        return xml;
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のオブジェクトセットはサポートされていません。オブジェクトセット「ApplicationUsers」と「Users」の両方に、ロールを作成するときにApplicationUserのインスタンスを含めることができます

分類Dev

データベース呼び出しが行われたときにコントローラーからの応答がJSONオブジェクトを返す場合、view.ejsにJSONオブジェクト値を出力できません

分類Dev

SpringBootJPA多対多の関係-RESTWebサービスは子オブジェクトを返すことができません

分類Dev

axiosリクエストに反応します。setStateは応答オブジェクトを読み取ることができません

分類Dev

Relex Payments応答オブジェクトをテストしようとしていますが、サイトがマシンに接続できません

分類Dev

POSTメソッドを使用してJSONオブジェクトを返すことができません

分類Dev

フォーム内でファイルとオブジェクトの両方を送信することはできません

分類Dev

paramをサービスオブジェクトに渡すことができません

分類Dev

応答としてオブジェクトを取得するRESTWebサービス

分類Dev

両方のオーディオソースをストリーミングすることはできません。マイクのみが機能します。

分類Dev

@higherkindと@extensionの両方のオブジェクトを生成できません

分類Dev

WCF SOAPサービスはJSONを出力として返すことができませんか?

分類Dev

ColdFusionは有効なUTF-8JSONオブジェクトを返すことができませんか?

分類Dev

Laravelクエリビルダーを使用する場合、stdClass型のオブジェクトを配列として使用することはできません

分類Dev

Json から正しいオブジェクトを返すことができません

分類Dev

FirebaseStreamクエリからオブジェクトのリストを返すことができません

分類Dev

FirebaseStreamクエリからオブジェクトのリストを返すことができません

分類Dev

MSVCは、コピーはできるが移動はできないオブジェクトを返すことはできません

分類Dev

Illustratorでは、オブジェクトをドラッグして移動することはできません

分類Dev

TypeScriptは、ジェネリックパラメータと同じベースのオブジェクトを返すことはできません

分類Dev

Python:「リスト」オブジェクトを整数として解釈することはできません

分類Dev

アプリケーション(GUI)とWindowsサービスを使用して1つのプロジェクトを作成し、両方をインストールする1つのセットアップを行うことはできますか?

分類Dev

データベースオブジェクトを返すことができません。

分類Dev

Angularサービスでオブジェクトのプロパティに値を割り当てることができません

分類Dev

MockitoでClassオブジェクトを返すことができません

分類Dev

.then()Promiseでオブジェクトを返すことができません

分類Dev

frisbyJSを介してサービスを呼び出している間、応答を返すことができません

分類Dev

Laravelの配列としてstdClass型のオブジェクトを使用することはできません

分類Dev

スレッドオブジェクトを整数として解釈することはできません

Related 関連記事

  1. 1

    複数のオブジェクトセットはサポートされていません。オブジェクトセット「ApplicationUsers」と「Users」の両方に、ロールを作成するときにApplicationUserのインスタンスを含めることができます

  2. 2

    データベース呼び出しが行われたときにコントローラーからの応答がJSONオブジェクトを返す場合、view.ejsにJSONオブジェクト値を出力できません

  3. 3

    SpringBootJPA多対多の関係-RESTWebサービスは子オブジェクトを返すことができません

  4. 4

    axiosリクエストに反応します。setStateは応答オブジェクトを読み取ることができません

  5. 5

    Relex Payments応答オブジェクトをテストしようとしていますが、サイトがマシンに接続できません

  6. 6

    POSTメソッドを使用してJSONオブジェクトを返すことができません

  7. 7

    フォーム内でファイルとオブジェクトの両方を送信することはできません

  8. 8

    paramをサービスオブジェクトに渡すことができません

  9. 9

    応答としてオブジェクトを取得するRESTWebサービス

  10. 10

    両方のオーディオソースをストリーミングすることはできません。マイクのみが機能します。

  11. 11

    @higherkindと@extensionの両方のオブジェクトを生成できません

  12. 12

    WCF SOAPサービスはJSONを出力として返すことができませんか?

  13. 13

    ColdFusionは有効なUTF-8JSONオブジェクトを返すことができませんか?

  14. 14

    Laravelクエリビルダーを使用する場合、stdClass型のオブジェクトを配列として使用することはできません

  15. 15

    Json から正しいオブジェクトを返すことができません

  16. 16

    FirebaseStreamクエリからオブジェクトのリストを返すことができません

  17. 17

    FirebaseStreamクエリからオブジェクトのリストを返すことができません

  18. 18

    MSVCは、コピーはできるが移動はできないオブジェクトを返すことはできません

  19. 19

    Illustratorでは、オブジェクトをドラッグして移動することはできません

  20. 20

    TypeScriptは、ジェネリックパラメータと同じベースのオブジェクトを返すことはできません

  21. 21

    Python:「リスト」オブジェクトを整数として解釈することはできません

  22. 22

    アプリケーション(GUI)とWindowsサービスを使用して1つのプロジェクトを作成し、両方をインストールする1つのセットアップを行うことはできますか?

  23. 23

    データベースオブジェクトを返すことができません。

  24. 24

    Angularサービスでオブジェクトのプロパティに値を割り当てることができません

  25. 25

    MockitoでClassオブジェクトを返すことができません

  26. 26

    .then()Promiseでオブジェクトを返すことができません

  27. 27

    frisbyJSを介してサービスを呼び出している間、応答を返すことができません

  28. 28

    Laravelの配列としてstdClass型のオブジェクトを使用することはできません

  29. 29

    スレッドオブジェクトを整数として解釈することはできません

ホットタグ

アーカイブ