問題タブ [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.
c# - ServiceStack.Text と Twitter JSON
Twitter の RateLimit Json を ServiceStack.Text で逆シリアル化しようとしています。JSON がプルダウンされるように、適切な DTO オブジェクトを作成しました (投稿の下部を参照)。System.Runtime.Serialization を使用して、フィールドの名前をよりわかりやすい名前に変更しました (これは、Twitter の他の多くの DTO オブジェクトで使用しています)。オブジェクトを逆シリアル化すると、RateLimitContext は適切に逆シリアル化されますが、Resources の下のすべてのアイテムは null に逆シリアル化されます。この特定のオブジェクトの DataMemberNames にはいくつかの「特殊な」文字が含まれているため、何か問題があると思われます。これは ServiceStack.Text のバグですか、それとも DTO に何か不足していますか?
API によって返されるサンプル Json を次に示します。
}
c# - ServiceStack.Text がリストに ModelFactory を使用しないのはなぜですか?
ServiceStack.Text でバグを見つけたと思います。このテスト (以下) を CustomSerializerTests ファイルに追加しました。単一のアイテムを逆シリアル化する場合は機能しますが、(i)list を逆シリアル化する場合、コンストラクターは呼び出されません。(IList から List に変更すると、テストに合格します。) これを IList で機能させるにはどうすればよいですか?
更新: ReflectionExtensions をさらに調べたところ、「新規」と「CreateInstance」を区別する理由がわかりません。CreateInstance へのすべての呼び出しは、可能であれば ModelFactory を使用する必要があります。本当ですか? インスタンスを作成するためのメソッドが必要以上にあるようです。
更新 2: これを機能させるために ReflextionExtensions をリファクタリングすることを検討しています。ただし、既存のすべてのテストで機能させる方法がわかりません。ModelFactory の既存のテストの中には、ReflextionExtensions.CreateInstance メソッドを呼び出すものがあります。これを機能させるために変更すると、CreateInstance が ModelFactory を使用することになります。したがって、これらの既存のテストで無限ループに入ります。テストが CreateInstance を直接呼び出すのではなく、ModelFactory のデフォルト値を返した場合、それは機能します。
c# - ServiceStack - シリアル化されたすべての日付に特定の DateTimeKind を使用させる方法はありますか?
私はこのようなPOCOを持っています:
ほとんどの場合、Entity Framework からハイドレートされていますが、Entity Framework の外部で使用することもできますし、今後も使用する予定です。
EF からの日付の DateTimeKind は指定されていません。これは、私が読んだものから正常です。
この POCO を (ServiceStack Redis クライアントを使用して) Redis にキャッシュすると、Local の DateTimeKind が返されます。
そのため、返されたオブジェクトにはジッターがあります。最初のパス (キャッシュされていない) には、オフセットのない ISO-8601 があります (DateTimeKind.Unspecified)。2 番目のパス (キャッシュ) は、オフセット付きの ISO-8601 です (DateTimeKind.Local を使用した Redis から)。
ServiceStack JSONシリアライザに日付を常に特定のDateTimeKindとして解釈させる方法はありますか? (「JsConfig.AppendUtcOffset」プロパティがあることは知っていますが、それが true であろうと false であろうと、値は決して変化しませんか?)
または、型指定された RedisClient からの逆シリアル化プロセスのどこかで、DateTimeKind をローカルにしますか?
POCO を手動で変更して DateTimeKind を強制することはできますが、それは機能しますが、エラーが発生しにくいものを望んでいました。
c# - ServiceStack.OrmLite で複合型のシリアル化/逆シリアル化をカスタマイズするにはどうすればよいですか
私は ServiceStack.OrmLite を使用してSQLite
データベースにデータを保持していますが、これまでのところ非常に満足しています。
ただし、私のオブジェクトの多くには、 を使用してシリアル化したくない複雑な型のプロパティがありますJSV
。
プロパティをデータベースに (文字列として) 格納するために使用するカスタムのシリアライゼーション/デシリアライゼーションを指定できる必要があります。世界では、db4o
これは によって提供される翻訳機能を使用することと同等IObjectConstructor
です。
適切にシリアル化および逆シリアル化できない複雑な型の良い例は、文字列に簡単にマップできるにもかかわらず、NodaTime 型です (私は で使用したシリアル化/逆シリアル化関数を既に持っていますdb4o
)。
それを達成する最も簡単な方法は何ですか?この複雑な型のプロパティを含む型ごとにラッパーを作成して維持する必要があるため、ラッパーはあまり便利ではありません。
c# - たとえば NodaTime 型に適用される場合、Json.NET コンバーターの ServiceStack.Text に相当するものは何ですか?
カスタム型 ( などNodaTime.LocalDateTime
) のシリアル化/逆シリアル化を ServiceStack.Text で制御するにはどうすればよいですか?
Json.NET はConverters
これを提供するため、クラスにカスタム型が含まれるたびに、対応するカスタム シリアライザー/デシリアライザーが使用されます。たとえば、タイプ NodaTime.LocalDateTime のプロパティは、カスタム メソッドを使用して文字列との間で変換できます。
db4o では、IObjectConstructor
永続化する前に型を別の型に変換する同様の変換レイヤーとして機能します (LocalDateTime を DateTime に変換できます)。