【问题标题】:How to update a property of a JSON object using NewtonSoft如何使用 NewtonSoft 更新 JSON 对象的属性
【发布时间】:2014-04-04 03:39:27
【问题描述】:

我有一个这样的 JSON 字符串:

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

如果值为"ML",我想将option 属性更新为"Male",如果值为"FM",我想更新"Female"

我已经到了这一点,但不确定如何继续:

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

我不知道如何到达option,它是value 的子代。

提前致谢。任何指针都会很棒。

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您可以使用属性作为键来访问对象:

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

    对于您的示例,请尝试:

    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.. 你让我很开心。
    • 如果我的 JSON 具有“参数”,我如何更新 Serial_no 和 Serial_code 的值:[ {“key”:“serial_no”,“value”:“213223324”},{“key”: "serial_code", "value": "1102" } ]
    • obj.parameters.find(p => p.key=="serial_no").value = 123;
    【解决方案2】:

    另一种方式,以最少的属性检索:

    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";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      相关资源
      最近更新 更多