/// <summary> /// This method will enumerate over all of the object's fields and generate the m_fields list. /// </summary> private void GenerateFieldData() { if (m_doNotSerialize) // if this class is not to be serialized, then don't find any fields for it. { return; } if (Type.Namespace == "System.Data.Entity.DynamicProxies") { return; } var allFields = Type.GetFields(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public); // Go through each field found and process according to certain rules foreach (var fi in allFields) { var t = fi.FieldType; if (!CFramework.IsValidType(t)) { continue; } var fld = new CFieldData(fi, this); if (fld.DoNotSerialize) // If the field does not want to be serialized, then don't. { continue; } if (m_onlySerializeExplicitFields && !fld.ExplicitlySerialize) { // the field is NOT explicitly marked AND the class requests ONLY explicitly marked fields get serialized continue; } m_fields.Add(fld); } }
/// <summary> /// Use the data found in the recursion state (this object) to serialize a single /// element in the array to Xml. /// </summary> private void AddArrayElementToXml() { var obj = m_array.GetValue(m_indicies); // the m_indicies array happens to be in the format needed for Array.GetValue if (SimpleElementSerialization) { if (m_arrayType.IsPrimitive) { m_simpleElements.Append(obj.ToString()); } else // its a string { var preEscaped = obj as string; var escaped = CFramework.ProtectStringForStringlist(preEscaped); m_simpleElements.Append(escaped); } m_simpleElements.Append(","); } else if (obj == null && m_serializer.Context.RemoveNullValuesFromXml) { m_skippedNull = true; } else { var elem = m_serializer.FrameworkSerialize(m_elementName, obj, m_xmlToAddTo, m_arrayType); if (m_serializer.Context.ArrayElementsIncludeIndicies || m_skippedNull) { elem.AddAttribute(m_serializer.Context.ArrayIndexAttributeName, Lib.ConvertArrayToString(m_indicies)); } m_skippedNull = false; } }