Esempio n. 1
0
        /// <summary>
        /// Generates an object from its XML representation.
        /// </summary>
        /// <param name="reader">XML reader</param>
        /// <returns>an new DDValue </returns>
        public static DDValue Deserialize(XmlReader reader)
        {
            DDValue v = null;

            reader.MoveToContent();

            var t = reader.GetAttribute(DDSchema.XML_SERIALIZE_ATTRIBUTE_TYPE);

            if (t == null) // if attribute type doesn't set default type - string
            {
                t = DEFAULT_VALUE_TYPE.ToString();
            }

            if (t == String.Empty) // here is type attribute equals string.empty like t="", the value is null here
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    reader.ReadStartElement();
                }
            }
            else if (t == DDSchema.XML_SERIALIZE_VALUE_TYPE_NULL) // here is type is null like t="null", the value is new DDValue here
            {
                v = new DDValue();                                // data and type are null here, but class has been initialezed yet
                if (reader.NodeType == XmlNodeType.Element)
                {
                    reader.ReadStartElement();
                }
            }
            else
            {
                //var type = Type.GetType(t);
                var type = GetTypeByXMLType(t);
                if (type == null)
                {
                    throw new DDTypeIncorrectException(t);
                }
                if (IsThisTypeXMLSerializeAsArray(type))
                {
                    var value = ReadXmlValueArray(reader);
                    if (value == null)
                    {
                        value = new string[] { }
                    }
                    ;                                            // support empty array
                    v = new DDValue(DDValue.ConvertFromStringArrayTo(type, value));
                }
                else
                {
                    v = new DDValue(DDValue.ConvertFromStringTo(type, GetXmlElementValue(reader)));
                }
            }
            if ((reader.NodeType == XmlNodeType.EndElement) && (reader.Name == DDSchema.XML_SERIALIZE_NODE_VALUE))
            {
                reader.ReadEndElement();                                                                                                    // Need to close the opened element </n>, only self
            }
            return(v);
        }
Esempio n. 2
0
        /// <summary>
        /// Generates an object from its XML representation.
        /// </summary>
        /// <param name="reader">XML reader</param>
        /// <returns>an new DDValue </returns>
        public static DDValue Deserialize(XmlReader reader)
        {
            DDValue v = null;

            reader.MoveToContent();

            var t = reader.GetAttribute(DDSchema.XML_SERIALIZE_ATTRIBUTE_TYPE);

            if ((string.IsNullOrEmpty(t)) || (t == DDSchema.XML_SERIALIZE_VALUE_TYPE_NULL))
            {
                v = new DDValue();                // data = null;
                if (reader.NodeType == XmlNodeType.Element)
                {
                    reader.ReadStartElement();
                }
            }
            else
            {
                var type = Type.GetType(t);
                if (IsThisTypeXMLSerializeAsArray(type))
                {
                    var value = ReadXmlValueArray(reader);
                    if (value == null)
                    {
                        value = new string[] { }
                    }
                    ;                                            // support empty array
                    v = new DDValue(DDValue.ConvertFromStringArrayTo(type, value));
                }
                else
                {
                    v = new DDValue(DDValue.ConvertFromStringTo(type, GetXmlElementValue(reader)));
                }
            }
            if ((reader.NodeType == XmlNodeType.EndElement) && (reader.Name == DDSchema.XML_SERIALIZE_NODE_VALUE))
            {
                reader.ReadEndElement();                                                                                                    // Need to close the opened element </n>, only self
            }
            return(v);
        }
Esempio n. 3
0
        /// <summary>
        ///  Generates an new DDValue from its Json representation.
        /// </summary>
        /// <param name="reader">Json stream reader</param>
        /// <returns>an new DDValue</returns>
        public static DDValue Deserialize(JsonReader reader)
        {
            DDValue v        = null;
            object  objValue = null;

            string[]  objValueArray   = null;
            object    t               = null;
            string    prevValueString = null;
            string    prevName        = null;
            JsonToken prevTokenType   = JsonToken.None;

            while (reader.Read())
            {
                if ((reader.TokenType == JsonToken.EndArray) || (reader.TokenType == JsonToken.EndObject))          // end value or array of values
                {
                    if ((t == null) && (objValue == null) && (objValueArray == null))
                    {
                        break;                                                                                      // returns null object "{ }"
                    }
                    else if ((t == null) && (objValue != null))
                    {
                        v = new DDValue(objValue);                                                                  // ptoperty type isn't specified auto convertion
                    }
                    else if ((t == null) && (objValueArray != null))
                    {
                        v = new DDValue(objValueArray);                                                             // ptoperty type isn't specified auto convertion string array
                    }
                    else if ((t != null) && (objValueArray != null))
                    {
                        v = new DDValue(DDValue.ConvertFromStringArrayTo(Type.GetType(t.ToString()), objValueArray));                                                // array
                    }
                    else
                    {
                        v = new DDValue(DDValue.ConvertFromStringTo(Type.GetType(t.ToString()), objValue.ToString()));
                    }
                    break;
                }
                if ((prevTokenType == JsonToken.PropertyName) && (prevName == DDSchema.JSON_SERIALIZE_ATTRIBUTE_TYPE))
                {
                    if (reader.TokenType == JsonToken.Null)
                    {
                        v = new DDValue();                                     // null type
                    }
                    t = reader.Value;
                }
                if ((prevTokenType == JsonToken.PropertyName) && (prevName == DDSchema.JSON_SERIALIZE_NODE_VALUE))
                {
                    if (reader.TokenType == JsonToken.Date)
                    {
                        objValue = ((DateTime)reader.Value).ToString(DDSchema.StringDateTimeFormat);
                    }
                    else
                    {
                        objValue = reader.Value;
                    }
                }

                if ((reader.TokenType == JsonToken.StartArray))  // array of values
                {
                    int i = 0;
                    objValueArray = new string[] {};
                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.EndArray)
                        {
                            break;                                         // end list of nodes
                        }
                        Array.Resize(ref objValueArray, i + 1);
                        objValueArray[i] = reader.Value.ToString();
                        i++;
                    }
                }

                //  save current values
                prevTokenType = reader.TokenType;
                if (reader.TokenType == JsonToken.None)
                {
                    prevValueString = null;
                    prevName        = null;
                }
                else if (reader.TokenType == JsonToken.PropertyName)
                {
                    prevName = reader.Value.ToString();
                }
                else if (reader.TokenType == JsonToken.String)
                {
                    prevValueString = reader.Value.ToString();
                }
            }
            return(v);
        }