不使用构造函数初始化多层嵌套对象并序列化为指定JSON
解决方案
你可以通过反射递归初始化整个对象树的方式实现,无需修改原有类的构造函数,步骤如下:
- 编写一个静态工具类,利用反射递归初始化所有引用类型属性,并将字符串属性设为空字符串:
using System; using System.Reflection; public static class ObjectInitializer { public static void Initialize(object obj) { if (obj == null) return; var type = obj.GetType(); foreach (var prop in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { if (!prop.CanWrite) continue; var propType = prop.PropertyType; var existingValue = prop.GetValue(obj); // 处理字符串类型,空值设为"" if (propType == typeof(string)) { if (existingValue == null) { prop.SetValue(obj, string.Empty); } continue; } // 处理引用类型(排除字符串),空值则创建实例并递归初始化 if (!propType.IsClass) continue; if (existingValue == null) { var newInstance = Activator.CreateInstance(propType); prop.SetValue(obj, newInstance); Initialize(newInstance); } else { Initialize(existingValue); } } } }
- 使用工具类初始化对象后再序列化:
var root = new Root(); ObjectInitializer.Initialize(root); var json = Newtonsoft.Json.JsonConvert.SerializeObject(root, Newtonsoft.Json.Formatting.Indented);
这样序列化出来的JSON会包含完整的嵌套结构,其中a属性会被设为空字符串,完全符合你的需求。
内容的提问来源于stack exchange,提问作者ragnar
相关产品推荐
相关产品推荐

