private void write(ClassMapping mapping, object instance, bool summary, PropertyMapping prop, SerializationMode mode) { // Check whether we are asked to just serialize the value element (Value members of primitive Fhir datatypes) // or only the other members (Extension, Id etc in primitive Fhir datatypes) // Default is all if (mode == SerializationMode.ValueElement && !prop.RepresentsValueElement) { return; } if (mode == SerializationMode.NonValueElements && prop.RepresentsValueElement) { return; } var value = prop.GetValue(instance); var isEmptyArray = (value as IList) != null && ((IList)value).Count == 0; // Message.Info("Handling member {0}.{1}", mapping.Name, prop.Name); if (value != null && !isEmptyArray) { string memberName = prop.Name; // For Choice properties, determine the actual name of the element // by appending its type to the base property name (i.e. deceasedBoolean, deceasedDate) if (prop.Choice == ChoiceType.DatatypeChoice) { memberName = determineElementMemberName(prop.Name, value.GetType()); } _current.WriteStartProperty(memberName); var writer = new DispatchingWriter(_current); // Now, if our writer does not use dual properties for primitive values + rest (xml), // or this is a complex property without value element, serialize data normally if (!_current.HasValueElementSupport || !serializedIntoTwoProperties(prop, value)) { writer.Serialize(prop, value, summary, SerializationMode.AllMembers); } else { // else split up between two properties, name and _name writer.Serialize(prop, value, summary, SerializationMode.ValueElement); _current.WriteEndProperty(); _current.WriteStartProperty("_" + memberName); writer.Serialize(prop, value, summary, SerializationMode.NonValueElements); } _current.WriteEndProperty(); } }
public void Serialize(PropertyMapping prop, object instance, bool summary, ComplexTypeWriter.SerializationMode mode) { if (prop == null) throw Error.ArgumentNull("prop"); var elements = instance as IList; if(elements == null) throw Error.Argument("existing", "Can only write repeating elements from a type implementing IList"); _current.WriteStartArray(); foreach(var element in elements) { var writer = new DispatchingWriter(_current); writer.Serialize(prop, element, summary, mode); } _current.WriteEndArray(); }
private void write(ClassMapping mapping, object instance, bool summary, PropertyMapping prop, SerializationMode mode) { // Check whether we are asked to just serialize the value element (Value members of primitive Fhir datatypes) // or only the other members (Extension, Id etc in primitive Fhir datatypes) // Default is all if (mode == SerializationMode.ValueElement && !prop.RepresentsValueElement) return; if (mode == SerializationMode.NonValueElements && prop.RepresentsValueElement) return; var value = prop.GetValue(instance); var isEmptyArray = (value as IList) != null && ((IList)value).Count == 0; // Message.Info("Handling member {0}.{1}", mapping.Name, prop.Name); if (value != null && !isEmptyArray) { string memberName = prop.Name; // For Choice properties, determine the actual name of the element // by appending its type to the base property name (i.e. deceasedBoolean, deceasedDate) if (prop.Choice == ChoiceType.DatatypeChoice) { memberName = determineElementMemberName(prop.Name, GetSerializationTypeForDataTypeChoiceElements(prop, value)); } _writer.WriteStartProperty(memberName); var writer = new DispatchingWriter(_writer); // Now, if our writer does not use dual properties for primitive values + rest (xml), // or this is a complex property without value element, serialize data normally if(!_writer.HasValueElementSupport || !serializedIntoTwoProperties(prop,value)) writer.Serialize(prop, value, summary, SerializationMode.AllMembers); else { // else split up between two properties, name and _name writer.Serialize(prop,value, summary, SerializationMode.ValueElement); _writer.WriteEndProperty(); _writer.WriteStartProperty("_" + memberName); writer.Serialize(prop, value, summary, SerializationMode.NonValueElements); } _writer.WriteEndProperty(); } }
public void Serialize(PropertyMapping prop, object instance, ComplexTypeWriter.SerializationMode mode) { if (prop == null) { throw Error.ArgumentNull("prop"); } var elements = instance as IList; if (elements == null) { throw Error.Argument("existing", "Can only write repeating elements from a type implementing IList"); } _current.WriteStartArray(); foreach (var element in elements) { var writer = new DispatchingWriter(_current); writer.Serialize(prop, element, mode); } _current.WriteEndArray(); }
public void Serialize(PropertyMapping prop, object instance, Rest.SummaryType summary, ComplexTypeWriter.SerializationMode mode) { if (prop == null) { throw Error.ArgumentNull(nameof(prop)); } var elements = instance as IList; if (elements == null) { throw Error.Argument(nameof(elements), "Can only write repeating elements from a type implementing IList"); } _writer.WriteStartArray(); foreach (var element in elements) { var writer = new DispatchingWriter(_writer, Settings); writer.Serialize(prop, element, summary, mode); } _writer.WriteEndArray(); }
private void write(ClassMapping mapping, object instance, Rest.SummaryType summary, PropertyMapping prop, SerializationMode mode) { if (Settings.CustomSerializer != null) { #pragma warning disable 618 bool done = Settings.CustomSerializer.OnBeforeSerializeProperty(prop.Name, instance, _writer); #pragma warning restore if (done) { return; } } // Check whether we are asked to just serialize the value element (Value members of primitive Fhir datatypes) // or only the other members (Extension, Id etc in primitive Fhir datatypes) // Default is all if (mode == SerializationMode.ValueElement && !prop.RepresentsValueElement) { return; } if (mode == SerializationMode.NonValueElements && prop.RepresentsValueElement) { return; } object value = prop.GetValue(instance); var isEmptyArray = (value as IList) != null && ((IList)value).Count == 0; // Message.Info("Handling member {0}.{1}", mapping.Name, prop.Name); if ((value != null || prop.RepresentsValueElement && prop.ElementType.IsEnum() && !string.IsNullOrEmpty(((Primitive)instance).ObjectValue as string)) && !isEmptyArray) { string memberName = prop.Name; // Enumerated Primitive.Value of Code<T> will always serialize the ObjectValue, not the derived enumeration if (prop.RepresentsValueElement && prop.ElementType.IsEnum()) { value = ((Primitive)instance).ObjectValue; //var rawValueProp = ReflectionHelper.FindPublicProperty(mapping.NativeType, "RawValue"); //var rawValue = rawValueProp.GetValue(instance, null); //if (rawValue != null) // value = rawValue; } // For Choice properties, determine the actual name of the element // by appending its type to the base property name (i.e. deceasedBoolean, deceasedDate) if (prop.Choice == ChoiceType.DatatypeChoice) { memberName = determineElementMemberName(prop.Name, GetSerializationTypeForDataTypeChoiceElements(prop, value)); } _writer.WriteStartProperty(memberName); var writer = new DispatchingWriter(_writer, Settings); // Now, if our writer does not use dual properties for primitive values + rest (xml), // or this is a complex property without value element, serialize data normally if (!_writer.HasValueElementSupport || !serializedIntoTwoProperties(prop, value)) { writer.Serialize(prop, value, summary, SerializationMode.AllMembers); } else { // else split up between two properties, name and _name writer.Serialize(prop, value, summary, SerializationMode.ValueElement); _writer.WriteEndProperty(); _writer.WriteStartProperty("_" + memberName); writer.Serialize(prop, value, summary, SerializationMode.NonValueElements); } _writer.WriteEndProperty(); } }