[解決済み] Json.NETであらゆる型のオブジェクトをJObjectに変換する
2022-12-02 04:15:13
質問
私はしばしば、WebAPIでクライアントに返す前に、追加情報でドメインモデルを拡張する必要があります。ViewModelの作成を避けるために、私は追加のプロパティを持つJObjectを返すことができると思いました。しかし、Newtonsoft JSONライブラリを1回呼び出すだけで、あらゆるタイプのオブジェクトをJObjectに変換する直接的な方法は見つかりませんでした。私はこのようなものを思いつきました。
- 最初のSerializeObject
- 次にパース
- を行い、JObjectを拡張します。
例えば..:
var cycles = cycleSource.AllCycles();
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var vm = new JArray();
foreach (var cycle in cycles)
{
var cycleJson = JObject.Parse(JsonConvert.SerializeObject(cycle, settings));
// extend cycleJson ......
vm.Add(cycleJson);
}
return vm;
これは正しい方法ですか?
どのように解決するのですか?
JObjectはIDictionaryを実装しているので、そのように使用することができます。例えば
var cycleJson = JObject.Parse(@"{""name"":""john""}");
//add surname
cycleJson["surname"] = "doe";
//add a complex object
cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" });
ということで、最終的なjsonは
{
"name": "john",
"surname": "doe",
"complexObj": {
"id": 1,
"name": "test"
}
}
また
dynamic
というキーワードで
dynamic cycleJson = JObject.Parse(@"{""name"":""john""}");
cycleJson.surname = "doe";
cycleJson.complexObj = JObject.FromObject(new { id = 1, name = "test" });
関連
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] Typeから新しいオブジェクトのインスタンスを作成する方法
-
[解決済み] C# で struct System.Byte byte[] を System.IO.Stream オブジェクトに変換するにはどうすればよいですか?
-
[解決済み] 戻り値のないFuncデリゲート
-
[解決済み] JSON.NET エラー タイプの自己参照ループが検出されました。
-
[解決済み] Json.netでシリアライズする際、プロパティ名を変更するにはどうすればよいですか?
-
[解決済み] Json.netを使用してJSONオブジェクトを動的オブジェクトにデシリアライズする。
-
[解決済み】JObjectを.NETオブジェクトにデシリアライズする方法
-
[解決済み】Newtonsoft.Json.Linq.JArrayを特定のオブジェクト型のリストに変換する。
-
[解決済み] Json.netによるJSONオブジェクト配列のデシリアライズ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない