【发布时间】:2018-12-12 14:24:08
【问题描述】:
我想编写一个函数来转换对象的每个属性和子属性。如果一个属性的所有属性都为空,那么我将该属性设置为空。我将举一个例子来解释。
例如,如果TeacherName 和TeacherSurname 都为空,那么我想将Teacher 设置为空。那么,如果ExamMark 和ExamName 和Teacher 为空,那么Exam 将为空。
你可以从这个链接Json Version看到像我的问题的json版本
public class Student
{
public string Name { get; set; }
public string Surname { get; set; }
public Address Address { get; set; }
public Exam Exam { get; set; }
}
public class Exam
{
public string ExamMark { get; set; }
public string ExamName { get; set; }
public Teacher Teacher { get; set; }
}
public class Teacher
{
public string TeacherName { get; set; }
public string TeacherSurname { get; set; }
}
public class Address
{
public string Country { get; set; }
public string City { get; set; }
}
我写了这个方法。但这只是第一步。但是我需要对子类进行递归。如何将此方法转换为递归?
public static object ConvertToNull(object obj)
{
Type objType = obj.GetType();
PropertyInfo[] properties = objType.GetProperties();
var mainClassProperties = properties.Where(p => p.PropertyType.Assembly == objType.Assembly);
foreach (var mainClassProperty in mainClassProperties)
{
object propValue = mainClassProperty.GetValue(obj, null);
var classAllProperties = propValue.GetType().GetProperties();
if (propValue.GetType().GetProperties().All(propertyInfo => propertyInfo.GetValue(propValue) == null))
{
mainClassProperty.SetValue(obj, null);
}
}
return obj;
}
【问题讨论】:
-
这真的不是一个伟大的设计。您能否提供更多关于如何创建这些对象以及为什么允许在无效状态下创建它们的背景信息?
-
我的课只是讲述我的故事的例子。在我的真实场景中,一个来自具有 300 属性的外部 Web 服务的对象。但是,很多子值都是空的,就像我的问题一样。所以,我想将它转换为基本对象。 @KirkLarkin
标签: c# asp.net asp.net-mvc