private WriteObjectsFields ( object o, |
||
o | object | |
type | ||
리턴 | void |
private void WriteObjectsFields(object o, Type type)
{
// fields in the alphabetical order
var fields = StampHelpers.GetFieldsInSerializationOrder(type);
foreach(var field in fields)
{
var formalType = field.FieldType;
var value = field.GetValue(o);
if(value != null)
{
parentObjects[value] = o;
}
if(Helpers.IsTypeWritableDirectly(formalType))
{
WriteValueType(formalType, value);
}
else
{
CheckForNullOrTransientnessAndWriteDeferredReference(value, formalType);
}
}
}
/// <summary> /// Writes the object using reflection. /// /// REMARK: this method is not thread-safe! /// </summary> /// <param name="objectWriter">Object writer's object</param> /// <param name="o">Object to serialize</param> internal static void WriteObjectUsingReflection(ObjectWriter objectWriter, object o) { Helpers.InvokeAttribute(typeof(PreSerializationAttribute), o); if (!objectWriter.WriteSpecialObject(o, !objectWriter.treatCollectionAsUserObject)) { objectWriter.WriteObjectsFields(o, o.GetType()); } }