45

I have a JSON string like this:

{
    "code": "GENDER",
    "value": { "option": "ML" }
}

I would like to update the option property to "Male" if the value is "ML" and "Female" if the value is "FM".

I have got to this point, but am unsure how to proceed:

JArray contentobject = (JArray)JsonConvert.DeserializeObject(contentJSON);  
JObject voicgObj = contentobject.Children().FirstOrDefault(ce =>   ce["code"].ToString() == "GENDER") as JObject;
JProperty voicgProp = voicgObj.Property("value");

I don't know how to get to the option which is a child of value.

Thanks in advance. Any pointers would be great.

Tatham Oddie
  • 4,290
  • 19
  • 31
Pipe2Path
  • 541
  • 1
  • 4
  • 13

2 Answers2

61

You can access the object by using properties as keys:

JObject obj = JObject.Parse(json);
string gender = (string)obj["value"]["option"];

For your example, try:

JObject obj = JObject.Parse(json);
var val = obj["value"];
string option = (string)val["option"];

if (option == "ML")
   val["option"] = "Male";

if (option == "FM")
   val["option"] = "Female";

string result = obj.ToString();
ltiong_sh
  • 3,186
  • 25
  • 28
  • How can i update the values for Serial_no and Serial_code if my JSON has "parameters": [ { "key": "serial_no", "value": "213223324" }, { "key": "serial_code", "value": "1102" } ] – venkat Sep 19 '19 at 04:19
  • obj.parameters.find(p => p.key=="serial_no").value = 123; – ltiong_sh Dec 23 '19 at 07:01
1

Another way, with minimal property retrieving:

var val = voicgObj["value"] as JObject;
JProperty optionProp = val.Property("option");
string option = optionProp.Value.Value<string>();

if (option == "ML")
    optionProp.Value = "Male";
else if (option == "FM")
    optionProp.Value = "Female";
Кое Кто
  • 445
  • 5
  • 9