private void EraseGuid(object classInstance)
{
Find_MemberGuid_And_Erase(classInstance);
Traverse_Members_For_NestedClassInstance(classInstance);
}
private object Get_MemberPropertyInstance_By_Property(object classInstance, PropertyInfo property)
{
return property.GetValue(classInstance);
}
private object Get_MemberFieldInstance_By_Field(object classInstance, FieldInfo field)
{
return field.GetValue(classInstance);
}
private void Find_MemberGuid_And_Erase(object classInstance)
{
var guidProperty = classInstance.GetType().GetProperty("guid");
if (guidProperty != null)
{
guidProperty.SetValue(classInstance, String.Empty);
return;
}
var guidField = classInstance.GetType().GetField("guid");
if (guidField != null)
{
guidField.SetValue(classInstance, String.Empty);
}
}
private void Traverse_Members_For_NestedClassInstance(object classInstance)
{
foreach (var property in classInstance.GetType().GetProperties())
{
if(!IsArray(property))
{
if(IsNestedClass(property))
{
var memberPropertyInstance = Get_MemberPropertyInstance_By_Property(classInstance, property);
EraseGuid(memberPropertyInstance);
}
}
else
{
Array array = (Array)property.GetValue(classInstance);
Traverse_ArrayElements_For_NestedClassInstance(array);
}
}
foreach (var field in classInstance.GetType().GetFields())
{
if (!IsArray(field))
{
if (IsNestedClass(field))
{
var memberFieldInstance = Get_MemberFieldInstance_By_Field(classInstance, field);
EraseGuid(memberFieldInstance);
}
}
else
{
Array array = (Array)field.GetValue(classInstance);
Traverse_ArrayElements_For_NestedClassInstance(array);
}
}
}
private bool IsNestedClass(PropertyInfo property)
{
return property.PropertyType.IsClass && !property.PropertyType.IsAssignableFrom(typeof(string));
}
private bool IsArray(PropertyInfo property)
{
return property.PropertyType.IsArray;
}
private bool IsNestedClass(FieldInfo field)
{
return field.FieldType.IsClass && !field.FieldType.IsAssignableFrom(typeof(string));
}
private bool IsArray(FieldInfo field)
{
return field.FieldType.IsArray;
}
private void Traverse_ArrayElements_For_NestedClassInstance(Array array)
{
if (array == null)
return;
for (int i = 0; i < array.Length; i++)
{
object element = array.GetValue(i);
EraseGuid(element);
}
}