C#中如何更新对象内嵌套Data属性下的UserPhoneNumber属性值
实现嵌套属性更新的方案
以下分3种常用开发场景给出对应实现方式:
场景1:使用强类型模型映射JSON(最推荐)
首先定义和JSON结构匹配的C#类:
public class UserData { public string UserPhoneNumber { get; set; } public string UserProfileName { get; set; } } public class GeneralSetting { public string Name { get; set; } public string SNo { get; set; } public UserData Data { get; set; } }
将JSON反序列化为强类型对象后,直接修改嵌套属性即可:
// 假设generalSettingResponse是已经反序列化后的GeneralSetting对象 generalSettingResponse.Data.UserPhoneNumber = "要更新的新手机号";
这种方式类型安全,不需要额外处理键匹配逻辑,调试成本最低。
场景2:使用JObject/动态JSON节点处理(无需定义类)
如果你是用Newtonsoft.Json的JObject直接操作JSON结构,只需要先拿到Data节点再修改子属性即可:
// 假设generalSettingResponse是JObject类型的对象 var dataNode = generalSettingResponse["Data"] as JObject; if (dataNode != null) { dataNode["UserPhoneNumber"] = "要更新的新手机号"; }
如果需要适配你现有settingsList的键匹配逻辑,可以扩展为:
var updateProfile = generalSettingResponse.Properties().Select(x => { // 处理顶层属性 if (settingsList.ContainsKey(x.Name.ToLower())) { return new JProperty(x.Name, settingsList[x.Name.ToLower()]); } // 处理Data下的嵌套属性 if (x.Name == "Data" && x.Value is JObject dataNode) { foreach (var dataProp in dataNode.Properties()) { if (settingsList.ContainsKey(dataProp.Name.ToLower())) { dataProp.Value = settingsList[dataProp.Name.ToLower()]; } } } return x; });
场景3:嵌套字典结构处理
如果你的对象是Dictionary<string, object>类型的嵌套结构,处理逻辑如下:
if (generalSettingResponse.TryGetValue("Data", out var dataObj) && dataObj is Dictionary<string, object> dataDict) { // 直接修改指定嵌套属性 dataDict["UserPhoneNumber"] = "要更新的新手机号"; // 适配settingsList匹配逻辑的写法 foreach (var key in settingsList.Keys) { if (dataDict.ContainsKey(key)) { dataDict[key] = settingsList[key]; } } }
你原有的代码只处理了顶层的键值对,没有进入嵌套的Data属性对应的子结构做匹配,所以无法修改嵌套属性。只需要在遍历顶层属性时,增加对Data子结构的遍历逻辑即可实现需求。
内容的提问来源于stack exchange,提问作者Ashwin Kumar
相关产品推荐
相关产品推荐

