যে কোনও প্রকারের বস্তুকে JSon.NET এর সাথে JObject এ রূপান্তর করুন


89

আমার প্রায়শই ওয়েবএপিআইয়ের সাথে ক্লায়েন্টে ফিরিয়ে দেওয়ার আগে আমার ডোমেন মডেলটিকে অতিরিক্ত তথ্যের সাথে প্রসারিত করতে হবে। ভিউমোডেল তৈরি করা এড়াতে আমি ভেবেছিলাম অতিরিক্ত বৈশিষ্ট্য সহ আমি JObject ফিরতে পারি। তবে আমি নিউটোনসফট জেএসওন লাইব্রেরিতে একক কল দিয়ে যোবজেক্টে কোনও প্রকারের অবজেক্টকে রূপান্তর করার সরাসরি উপায় খুঁজে পাইনি। আমি এরকম কিছু নিয়ে এসেছি:

  1. প্রথম সিরিয়ালাইজ অবজেক্ট
  2. তারপরে পার্স
  3. এবং 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;

আমি এই সঠিক উপায়?


17
JObject.FromObject(your_domain_object)আপনি যা খুঁজছেন তা @ এলবি এর উত্তর দেখুন।
— ব্রায়ান রজার্স

উত্তর:


123

জবজেক্ট আইডেটোরিয়াস প্রয়োগ করে, যাতে আপনি এটি সেভাবে ব্যবহার করতে পারেন। প্রাক্তন জন্য,

var cycleJson  = JObject.Parse(@"{""name"":""john""}");

//add surname
cycleJson["surname"] = "doe";

//add a complex object
cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" });

চূড়ান্ত জেসন হবে

{
  "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" });

আপনার উত্তরের জন্য ধন্যবাদ cycle আমি কীভাবে অতিরিক্ত ধনুর্বন্ধনী সরিয়ে ফেলতে পারি ??? name "নাম": "জন", "উপাধি": "দো", "জটিল ওবিজে": id "আইডি": 1, "নাম": "পরীক্ষা"}}}
— রিম্যা থেক্কুভিটল

@remyathekkuvettil এটি একটি বৈধ জাসন নয়। আপনার কিছু অ্যাডহক স্ট্রিং ম্যানিপুলেশন দরকার।
— LB

29

আপনার যদি কোনও অবজেক্ট থাকে এবং JObject হয়ে উঠতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

JObject o = (JObject)JToken.FromObject(miObjetoEspecial);

এটার মত :

Pocion pocionDeVida = new Pocion{
tipo = "vida",
duracion = 32,
};

JObject o = (JObject)JToken.FromObject(pocionDeVida);
Console.WriteLine(o.ToString());
// {"tipo": "vida", "duracion": 32,}

10
কেন JObject.FromObject () এর পরিবর্তে (JObject) JToken.FromObject () সরাসরি না?
— টমেক্সৌ

এটি আমাকে একটিSystem.InvalidCastException
— সুপারনিঞ্জা

1

এটি কাজ করবে:

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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.