Saya sering kali perlu memperluas model Domain saya dengan info tambahan sebelum mengembalikannya ke klien dengan WebAPI. Untuk menghindari pembuatan ViewModel, saya pikir saya bisa mengembalikan JObject dengan properti tambahan. Namun saya tidak dapat menemukan cara langsung untuk mengonversi objek jenis apa pun ke JObject dengan panggilan tunggal ke perpustakaan Newtonsoft JSON. Saya menemukan sesuatu seperti ini:
- SerializeObject pertama
- lalu Parse
- dan memperpanjang JObject
Misalnya.:
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;
Saya ini cara yang benar?
JObject.FromObject(your_domain_object)
adalah apa yang Anda cari. Lihat jawaban @ LB.Jawaban:
JObject mengimplementasikan IDictionary, jadi Anda bisa menggunakannya seperti itu. Misalnya,
var cycleJson = JObject.Parse(@"{""name"":""john""}"); //add surname cycleJson["surname"] = "doe"; //add a complex object cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" });
Jadi json terakhir adalah
{ "name": "john", "surname": "doe", "complexObj": { "id": 1, "name": "test" } }
Anda juga bisa menggunakan
dynamic
kata kuncidynamic cycleJson = JObject.Parse(@"{""name"":""john""}"); cycleJson.surname = "doe"; cycleJson.complexObj = JObject.FromObject(new { id = 1, name = "test" });
sumber
Jika Anda memiliki objek dan ingin menjadi JObject, Anda dapat menggunakan:
seperti ini :
Pocion pocionDeVida = new Pocion{ tipo = "vida", duracion = 32, }; JObject o = (JObject)JToken.FromObject(pocionDeVida); Console.WriteLine(o.ToString()); // {"tipo": "vida", "duracion": 32,}
sumber
System.InvalidCastException
Ini akan berhasil:
var cycles = cycleSource.AllCycles(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; var vm = new JArray(); foreach (var cycle in cycles) { var cycleJson = JObject.FromObject(cycle); // extend cycleJson ...... vm.Add(cycleJson); } return vm;
sumber