ServiceStack でこれを行う適切な方法は、既存のビジネス オブジェクトを使用しようとするのではなく、API の目的で DTO を定義することです。クライアントが辞書プロパティを持つ DTO を返すリストを解析する準備ができている場合は、機能する可能性があります。
これを行う「ServiceStack」の方法の 1 つは、各プロパティが Nullable であるすべての可能なプロパティを使用して、シンプルでフラットな DTO を定義することです。
DTO が次のように定義されている場合:
public class NullablePartials
{
public Int32? Test1 { get; set; }
public String Test2 { get; set; }
public Double? Test3 { get; set; }
}
次のフラグメント:
Dictionary<String, String> MyDtoDictionary = new Dictionary<String, String>();
MyDtoDictionary.Add("Test1", "7");
MyDtoDictionary.Add("Test2", "Value2");
NullablePartials result = MyDtoDictionary.ToJson().FromJson<NullablePartials>();
System.Diagnostics.Debug.WriteLine(MyDtoDictionary.ToJson());
System.Diagnostics.Debug.WriteLine(result.ToJson());
生成:
{"Test1":"7","Test2":"Value2"}
{"Test1":7,"Test2":"Value2"}
null をシリアル化するためのデフォルト設定で、JSON ライブラリとして ServiceStack.Text を使用します。
ベスト プラクティスについては、https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-servicesを参照してください。ここでは、ServiceStack の哲学について説明しています。特に使用する推奨事項:
コードファースト POCO
ServiceStack はクリーンで再利用可能なコードを促進するため、ほぼすべてのコード ファースト POCO の使用を常に推奨してきました。つまり、同じ POCO を使用できます。
- リクエストおよびレスポンス DTO 内 (クライアントおよびサーバー上)
- JSON、JSV、および CSV テキスト シリアライザー
- OrmLite、db4o、NHibernate のデータモデルとして
- Redis に格納されたエンティティとして
- キャッシュとセッションに保存されたブロブとして
- MQ のサービスにドロップされて実行される
- 複雑な構成への脱水
POCO を中心に機能が構築されたさまざまなテクノロジを活用することで、前例のないレベルの再利用を提供し、摩擦を減らし、一貫性があり、より使いやすく、合理化が容易なコードベースを促進します。