ASP.NET Web APIアプリケーションでは、私が扱っているモデルの中には、クライアントサイドでのみ有用な特別なJSONのチャンクが含まれています。サーバー上では、文字列としてリレーショナルデータベースに出入りするだけです。パフォーマンスが重要であり、JSON文字列サーバー側を処理することは意味がないようです。Json.NET - すでにシリアル化されたプロパティの再シリアル化を防止する
だから、C#で、このようなオブジェクトを想像:デフォルトでは
new Person
{
FirstName = "John",
LastName = "Smith",
Json = "{ \"Age\": 30 }"
};
を、Json.NETはこのように、このオブジェクトをシリアル化します:
{
"FirstName": "John",
"LastName": "Smith",
"Json": "{ \"Age\": 30 }"
}
私が指示できるようにしたいと思いますJson.NETはJson
プロパティが既にシリアル化された表現であると仮定しているため、再シリアル化しないでください。結果のJSONは次のようになります。
{
"FirstName": "John",
"LastName": "Smith",
"Json": {
"Age": 30
}
}
理想的には、これは両方向で機能します。すなわち、JSON表現をポストすると、上のC#表現に自動的に逆シリアル化されます。
Json.NETでこれを達成するための最良のメカニズムは何ですか?カスタムJsonConverter
が必要ですか?より単純な属性ベースのメカニズムがありますか?効率性の問題。全体のポイントは、シリアル化オーバーヘッドをスキップすることですはマイクロ最適化のビットであることができますが、議論のためにそうではないと仮定しよう。 (潜在的にかさばるJson
のプロパティが返されると、大きなリストがあります。)
プロパティ 'Json'が文字列の場合は、文字列としてシリアル化する必要があります。私は問題が何であるか完全にはわからない。それを文字列としてシリアル化し、データベースに文字列として格納し、それを文字列として逆直列化します。 –
たぶん私はそれをうまく説明しませんでした。私はデフォルトで何が起きるのかと私が達成しようとしているものとの違いを強調する余分なJSONサンプルを追加しました。 –
サーバーサイドのコードがJSON文字列を制御できる場所から取得している場合は、この問題を解決するよりも、その部分を修正するほうがずっと良いでしょう。しかし、あなたがアクセスできないものから来ている場合、私が最初に試みるのは、それを取得したソースから取得したときにそれを逆シリアル化することです。これはカスタムデシリアライザで行うことができます。あなたのために最高の解決策を考え出すための情報が不足しています。 – krillgar