Esempio n. 1
0
 public SerializedObject(string strName, SerializedTypeInfo objTypeInfo)
 {
     Name     = strName;
     TypeInfo = objTypeInfo;
     Objects  = new SerializedObjectCollection();
     Values   = new SerializedValueCollection();
 }
Esempio n. 2
0
        public SerializedObject Add(string strName, SerializedTypeInfo objTypeInfo)
        {
            if (strName == null)
            {
                throw new ArgumentNullException("strName", "a valid non-null string is required..");
            }
            if (objTypeInfo == null)
            {
                throw new ArgumentNullException("objTypeInfo", "a valid non-null SerializedTypeInfo is required..");
            }

            SerializedObject objObject = new SerializedObject(strName, objTypeInfo);

            Add(objObject);

            return(objObject);
        }
Esempio n. 3
0
        public static SerializedObject Serialize(string strName, ICustomSerializer objCustomSerializer)
        {
            if ((strName == null) || (strName.Length == 0))
            {
                throw new ArgumentOutOfRangeException("strName", "A valid non-null, non-empty string is required..");
            }
            if (objCustomSerializer == null)
            {
                throw new ArgumentException("objCustomSerializer", "A valid non-null ICustomSerializer is required..");
            }

            SerializedTypeInfo objTypeInfo         = new SerializedTypeInfo(objCustomSerializer);
            SerializedObject   objSerializedObject = new SerializedObject(strName, objTypeInfo);

            objCustomSerializer.WriteData(objSerializedObject);

            return(objSerializedObject);
        }
Esempio n. 4
0
        private void Serialize(SerializedObject objSerializedObject, XmlLiteElement objXmlElement)
        {
            SerializedTypeInfo objTypeInfo = objSerializedObject.TypeInfo;

            if (objTypeInfo.TypeName.Length > 0)
            {
                objXmlElement.Attributes.Add(TypeAttributeName, objTypeInfo.TypeName);
            }
            if (objTypeInfo.AssemblyName.Length > 0)
            {
                objXmlElement.Attributes.Add(AssemblyAttributeName, objTypeInfo.AssemblyName);
            }

            foreach (SerializedValue objChildValue in objSerializedObject.Values.ToArray())
            {
                string strValue = string.Empty;

                if (objChildValue.IsNull == false)
                {
                    switch (objChildValue.ValueType)
                    {
                    case (SerializedValueType.Boolean):
                        strValue = objChildValue.GetBoolean().ToString();
                        break;

                    case (SerializedValueType.Byte):
                        strValue = objChildValue.GetByte().ToString();
                        break;

                    case (SerializedValueType.ByteArray):

                        byte[]        objBytes = objChildValue.GetByteArray();
                        StringBuilder objValue = new StringBuilder();
                        foreach (byte bytValue in objBytes)
                        {
                            objValue.AppendFormat(", {0}", bytValue);
                        }

                        strValue = objValue.ToString();
                        break;

                    case (SerializedValueType.Char):
                        strValue = objChildValue.GetChar().ToString();
                        break;

                    case (SerializedValueType.DateTime):
                        strValue = objChildValue.GetDateTime().ToString();
                        break;

                    case (SerializedValueType.Decimal):
                        strValue = objChildValue.GetDecimal().ToString();
                        break;

                    case (SerializedValueType.Double):
                        strValue = objChildValue.GetDouble().ToString();
                        break;

                    case (SerializedValueType.Guid):
                        strValue = objChildValue.GetGuid().ToString();
                        break;

                    case (SerializedValueType.Int16):
                        strValue = objChildValue.GetInt16().ToString();
                        break;

                    case (SerializedValueType.Int32):
                        strValue = objChildValue.GetInt32().ToString();
                        break;

                    case (SerializedValueType.Int64):
                        strValue = objChildValue.GetInt64().ToString();
                        break;

                    case (SerializedValueType.Null):
                        strValue = string.Empty;
                        break;

                    case (SerializedValueType.SByte):
                        strValue = objChildValue.GetSByte().ToString();
                        break;

                    case (SerializedValueType.Single):
                        strValue = objChildValue.GetSingle().ToString();
                        break;

                    case (SerializedValueType.String):
                        strValue = objChildValue.GetString();
                        break;

                    case (SerializedValueType.Enum):
                        strValue = objChildValue.Value.ToString();
                        break;

                    case (SerializedValueType.UInt16):
                        strValue = objChildValue.GetUInt16().ToString();
                        break;

                    case (SerializedValueType.UInt32):
                        strValue = objChildValue.GetUInt32().ToString();
                        break;

                    case (SerializedValueType.UInt64):
                        strValue = objChildValue.GetUInt64().ToString();
                        break;

                    case (SerializedValueType.Timespan):
                        strValue = objChildValue.GetTimespan().ToString();
                        break;

                    default:
                        string strErrorMessage = string.Format("No case handler is defined for SerializedValueType.{0}", objChildValue.ValueType);
                        throw new Exception(strErrorMessage);
                    }
                }

                if (objChildValue.Encrypted == true)
                {
                    strValue = EncryptionBase.Instance.Encrypt(strValue);
                }

                XmlLiteElement objChildElement = new XmlLiteElement(objChildValue.Name, strValue);
                objChildElement.Attributes.Add(TypeAttributeName, objChildValue.ValueType.ToString());

                if (objChildValue.IsNull == true)
                {
                    objChildElement.Attributes.Add(IsNullAttributeName, "true");
                }

                if (objChildValue.Encrypted == true)
                {
                    objChildElement.Attributes.Add(EncryptedAttributeName, "true");
                }

                objXmlElement.Elements.Add(objChildElement);
            }
            foreach (SerializedObject objChildObject in objSerializedObject.Objects.ToArray())
            {
                XmlLiteElement objChildElement = new XmlLiteElement(objChildObject.Name);
                Serialize(objChildObject, objChildElement);
                objXmlElement.Elements.Add(objChildElement);
            }
        }
Esempio n. 5
0
        private void Deserialize(XmlLiteElement objXmlElement, SerializedObject objSerializedObject)
        {
            foreach (XmlLiteElement objChildElement in objXmlElement.Elements.ToArray())
            {
                string strAssemblyName = objChildElement.Attributes.GetValue(AssemblyAttributeName, string.Empty);
                string strTypeName     = objChildElement.Attributes.GetValue(TypeAttributeName, string.Empty);

                if ((strTypeName.Length > 0) && (strAssemblyName.Length > 0))
                {
                    SerializedTypeInfo objTypeInfo = new SerializedTypeInfo(strTypeName, strAssemblyName);

                    SerializedObject objChildObject = new SerializedObject(objChildElement.Name, objTypeInfo);
                    Deserialize(objChildElement, objChildObject);
                    objSerializedObject.Objects.Add(objChildObject);
                }
                else if (strTypeName.Length > 0)
                {
                    XmlLiteAttribute    objChildAttribute = objChildElement.Attributes[TypeAttributeName];
                    SerializedValueType enuValueType      = (SerializedValueType)Enum.Parse(typeof(SerializedValueType), objChildAttribute.Value);

                    bool blnIsNull      = Convert.ToBoolean(objChildElement.Attributes.GetValue(IsNullAttributeName, "false"));
                    bool blnIsEncrypted = Convert.ToBoolean(objChildElement.Attributes.GetValue(EncryptedAttributeName, "false"));

                    string strValue = ((blnIsNull == true) ? null : objChildElement.Value);
                    if (blnIsEncrypted == true)
                    {
                        strValue = EncryptionBase.Default.Decrypt(objChildElement.Value);
                    }

                    object objValue = null;
                    switch (enuValueType)
                    {
                    case (SerializedValueType.Boolean):
                        objValue = Convert.ToBoolean(strValue);
                        break;

                    case (SerializedValueType.Byte):
                        objValue = Convert.ToByte(strValue);
                        break;

                    case (SerializedValueType.ByteArray):

                        List <byte> objBytes = new List <byte>();
                        string[]    strBytes = strValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string strByte in strBytes)
                        {
                            objBytes.Add(Convert.ToByte(strByte));
                        }
                        objValue = objBytes.ToArray();
                        break;

                    case (SerializedValueType.Char):
                        objValue = Convert.ToChar(strValue);
                        break;

                    case (SerializedValueType.DateTime):
                        objValue = Convert.ToDateTime(strValue);
                        break;

                    case (SerializedValueType.Decimal):
                        objValue = Convert.ToDecimal(strValue);
                        break;

                    case (SerializedValueType.Double):
                        objValue = Convert.ToDouble(strValue);
                        break;

                    case (SerializedValueType.Guid):
                        objValue = new Guid(strValue);
                        break;

                    case (SerializedValueType.Int16):
                        objValue = Convert.ToInt16(strValue);
                        break;

                    case (SerializedValueType.Int32):

                        // For backwards compatability
                        //
                        int intResult = 0;
                        if (Int32.TryParse(strValue, out intResult) == true)
                        {
                            objValue = Convert.ToInt32(strValue);
                        }
                        else
                        {
                            objValue = strValue;
                        }
                        break;

                    case (SerializedValueType.Int64):
                        objValue = Convert.ToInt64(strValue);
                        break;

                    case (SerializedValueType.Null):
                        objValue = null;
                        break;

                    case (SerializedValueType.SByte):
                        objValue = Convert.ToSByte(strValue);
                        break;

                    case (SerializedValueType.Single):
                        objValue = Convert.ToSingle(strValue);
                        break;

                    case (SerializedValueType.String):
                    case (SerializedValueType.Enum):
                        objValue = strValue;
                        break;

                    case (SerializedValueType.UInt16):
                        objValue = Convert.ToUInt16(strValue);
                        break;

                    case (SerializedValueType.UInt32):
                        objValue = Convert.ToUInt32(strValue);
                        break;

                    case (SerializedValueType.UInt64):
                        objValue = Convert.ToUInt64(strValue);
                        break;

                    case (SerializedValueType.Timespan):
                        objValue = TimeSpan.Parse(strValue);
                        break;

                    default:
                        string strErrorMessage = string.Format("No case handler is defined for SerializedValueType.{0}", enuValueType);
                        throw new Exception(strErrorMessage);
                    }

                    SerializedValue objSerializedValue = new SerializedValue(objChildElement.Name, objValue, enuValueType, blnIsEncrypted);
                    objSerializedObject.Values.Add(objSerializedValue);
                }
                else // This element is just an empty type / container.
                {
                    SerializedObject objChildObject = new SerializedObject(objChildElement.Name, new SerializedTypeInfo());
                    Deserialize(objChildElement, objChildObject);
                    objSerializedObject.Objects.Add(objChildObject);
                }
            }
        }