internal void WriteField(object target, MemberInfo meminfo) { var value = meminfo.GetValue(target); // Skip null fields right away (covers nullable primitive types) if (value == null) { return; } // Skip null form references (that are not a list of references) unless it is a required field if (meminfo.IsReference && !meminfo.IsListType && (uint)value == 0 && !meminfo.IsRequired) { return; } string fieldName = meminfo.FieldNames.First(); if (meminfo.IsPrimitiveType) { // Primitive types have only one propery name if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { BeginPropertySegment(fieldName); WritePrimitiveField(meminfo, item); EndSegment(); } } else { BeginPropertySegment(fieldName); WritePrimitiveField(meminfo, value); EndSegment(); } } else { if (meminfo.FieldType.IsSubclassOf(typeof(Compound))) { if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { WriteCompoundField((Compound)item); } } else { WriteCompoundField((Compound)value); } } else { if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { WriteStructuredField((Field)item, fieldName); } } else { WriteStructuredField((Field)value, fieldName); } } } }
internal void WriteField(object target, MemberInfo meminfo) { var value = meminfo.GetValue(target); // Skip null fields right away (covers nullable primitive types) if (value == null) return; // Skip null form references (that are not a list of references) unless it is a required field if (meminfo.IsReference && !meminfo.IsListType && (uint)value == 0 && !meminfo.IsRequired) return; string fieldName = meminfo.FieldNames.First(); if (meminfo.IsPrimitiveType) { // Primitive types have only one propery name if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { BeginPropertySegment(fieldName); WritePrimitiveField(meminfo, item); EndSegment(); } } else { BeginPropertySegment(fieldName); WritePrimitiveField(meminfo, value); EndSegment(); } } else { if (meminfo.FieldType.IsSubclassOf(typeof(Compound))) { if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { WriteCompoundField((Compound)item); } } else { WriteCompoundField((Compound)value); } } else { if (meminfo.IsListType) { foreach (var item in (IEnumerable)value) { WriteStructuredField((Field)item, fieldName); } } else { WriteStructuredField((Field)value, fieldName); } } } }