{
"root_id": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_tittel": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_mottaker_adresse1": {
"Path": "InsertDocuments",
"MainContract": "CreateDocumentParameter"
},
"root_mottaker_adresse2": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_web_id_guid": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
}
{
"root_id": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_tittel": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_mottaker_adresse1": {
"Path": "InsertDocuments",
"MainContract": "CreateDocumentParameter"
},
"root_mottaker_adresse2": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"root_web_id_guid": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
}
{
"id": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"tittel": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"mottaker": {
"adresse1": {
"Path": "InsertDocuments",
"MainContract": "CreateDocumentParameter"
},
"adresse2": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
},
"web": {
"id": {
"guid": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
}
}
}
{
"id": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"tittel": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
},
"mottaker": {
"adresse1": {
"Path": "InsertDocuments",
"MainContract": "CreateDocumentParameter"
},
"adresse2": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
},
"web": {
"id": {
"guid": {
"Path": "InsertCases",
"MainContract": "CreateCaseParameter"
}
}
}
}
if you see the difference the hierarchy is splittedsplit with _(underscore). I want to make it in a more nested way.
- root_element
root_element-> elementelement - root_element1_element2
root_element1_element2-> element1element1is parent and element2element2is child.
JObject obj = JObject.Parse(jsonString);
JObject finalObj = new JObject();
foreach (var item in obj)
{
var keys = item.Key.Replace("root_", "").Split("_").Reverse();
bool nestedKeyProcessed = false;
JObject tempObj = new JObject();
foreach (string key in keys)
{
if (keys.Count() > 1 && !nestedKeyProcessed)
{
tempObj = CreateJObject(key, item.Value);
nestedKeyProcessed = true;
}
else
{
if (keys.Count() == 1)
finalObj.Add(new JProperty(key, item.Value));
else
tempObj = CreateJObjectUsingJProperty(key, tempObj);
}
}
if (keys.Count() > 1)
finalObj.Merge(tempObj, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union });
}
string json = JsonConvert.SerializeObject(finalObj);
JObject CreateJObject(string key, JToken? data)
{
JObject obj = new JObject();
obj.Add(key, data);
return obj;
}
JObject CreateJObjectUsingJProperty(string key, object? data)
{
JObject obj = new JObject(new JProperty(key, data));
return obj;
}