示例#1
0
        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));
        }
示例#2
0
        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();
            }
        }