private string SerializeProperty <T>(PropertyMapping propertyMapping, T data) { if (data == null) { return(string.Format("{0} : {1} \n", propertyMapping.ScopedName, null)); } var output = propertyMapping.GetValue(data); return(string.Format("{0} : {1}", propertyMapping.ScopedName, output)); }
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(); } }
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(); } }