예제 #1
0
        public void Serialize(BinaryWriter writer, object obj)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }

            var objType = obj.GetType();

            if (!Attribute.IsDefined(objType, typeof(SerializableAttribute)))
            {
                throw new ArgumentException(String.Format("The type '{0} is not serializable", objType.FullName));
            }

            var graph = new SerializeData(objType);

            if (typeof(ISerializable).IsAssignableFrom(objType))
            {
                ((ISerializable)obj).GetData(graph);
            }
            else
            {
                GetObjectValues(objType, obj, graph);
            }

            SerializeGraph(writer, Encoding, graph);
        }
예제 #2
0
        void ISerializable.GetData(SerializeData data)
        {
            data.SetValue("Left", Left);
            data.SetValue("Right", Right);

            GetData(data);
        }
예제 #3
0
        private static void SerializeGraph(BinaryWriter writer, Encoding encoding, SerializeData graph)
        {
            var values = graph.Values.ToDictionary(x => x.Key, x => x.Value);
            var count  = values.Count;

            writer.Write(count);

            foreach (var pair in values)
            {
                var key       = pair.Key;
                var keyLength = key.Length;

                writer.Write(keyLength);
                writer.Write(key.ToCharArray());

                SerializeValue(writer, encoding, pair.Value.Key, pair.Value.Value);
            }
        }
예제 #4
0
        private static void GetObjectValues(Type objType, object obj, SerializeData graph)
        {
            var fields = objType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
                         .Where(x => !x.IsDefined(typeof(NonSerializedAttribute), false) && !x.Name.EndsWith("_BackingField"));
            var properties = objType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                             .Where(x => !x.IsDefined(typeof(NonSerializedAttribute), false) && x.CanRead);

            var members = new List <MemberInfo>();

            members.AddRange(fields.Cast <MemberInfo>());
            members.AddRange(properties.Cast <MemberInfo>());

            foreach (var member in members)
            {
                var  memberName = member.Name;
                Type memberType;

                object value;
                if (member is FieldInfo)
                {
                    value      = ((FieldInfo)member).GetValue(obj);
                    memberType = ((FieldInfo)member).FieldType;
                }
                else if (member is PropertyInfo)
                {
                    value      = ((PropertyInfo)member).GetValue(obj, null);
                    memberType = ((PropertyInfo)member).PropertyType;
                }
                else
                {
                    throw new NotSupportedException();
                }

                graph.SetValue(memberName, memberType, value);
            }
        }
        protected override void GetData(SerializeData data)
        {
            data.SetValue("CursorName", CursorName);
            data.SetValue("QueryExpression", QueryExpression);
            data.SetValue("Flags", (int)Flags);

            if (Parameters != null) {
                var parameters = Parameters.ToArray();
                data.SetValue("Parameters", parameters);
            }
        }
예제 #6
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Value", Value);
     data.SetValue("Type", SqlType);
 }
예제 #7
0
 void ISerializable.GetData(SerializeData data)
 {
     data.SetValue("ColumnName", ColumnName);
     data.SetValue("ColumnType", ColumnType);
     data.SetValue("IsNotNull", IsNotNull);
     data.SetValue("Default", DefaultExpression);
     data.SetValue("IndexType", IndexType);
 }
예제 #8
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("ExceptionName", ExceptionName);
 }
예제 #9
0
 void ISerializable.GetData(SerializeData data)
 {
     data.SetValue("Column", ColumnName);
 }
예제 #10
0
 protected virtual void GetData(SerializeData data)
 {
 }
예제 #11
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Functions", Functions);
     data.SetValue("Names", Names);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Test", TestExpression);
     data.SetValue("True", TrueExpression);
     data.SetValue("False", FalseExpression);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("SequenceName", SequenceName);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("TableName", TableName);
     data.SetValue("QueryPlan", QueryPlan);
     data.SetValue("ColumnNames", ColumnNames);
     data.SetValue("ColumnIndices", ColumnIndices);
 }
예제 #15
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("LeftColumns", LeftColumns);
     data.SetValue("RightColumns", RightColumns);
 }
예제 #16
0
 void ISerializable.GetData(SerializeData data)
 {
     data.SetValue("Password", PasswordExpression);
 }
예제 #17
0
        void ISerializable.GetData(SerializeData data)
        {
            data.SetValue("SourceQuery", SourceQuery);
            data.SetValue("IsFromQuery", IsFromQuery);

            GetData(data);
        }
예제 #18
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Offset", Offset);
     data.SetValue("Count", Count);
 }
예제 #19
0
 void ISerializable.GetData(SerializeData data)
 {
     data.SetValue("Constraint", ConstraintName);
 }
예제 #20
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("MaxSize", MaxSize);
     if (Locale != null)
         data.SetValue("Locale", Locale.Name);
     if (Encoding != null)
         data.SetValue("Encoding", Encoding.WebName);
 }
예제 #21
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("UserName", UserName);
     data.SetValue("Password", Password);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Value", typeof(DataObject), Value);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Variable", VariableReference);
     data.SetValue("Value", ValueExpression);
 }
예제 #24
0
 void ISerializable.GetData(SerializeData data)
 {
     if (tableNames != null)
         data.SetValue("TableNames", tableNames.ToArray());
     if (fromTables != null)
         data.SetValue("FromTables", fromTables.ToArray());
     if (joinParts != null)
         data.SetValue("JoinParts", joinParts.ToArray());
 }
예제 #25
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Marker", MarkerName);
 }
예제 #26
0
 public void GetData(SerializeData graph)
 {
     graph.SetValue("value", Value);
     graph.SetValue("parent", Parent);
 }
예제 #27
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("TableInfo", typeof(TableInfo), TableInfo);
     data.SetValue("Temporary", Temporary);
     data.SetValue("IfNotExists", IfNotExists);
 }
예제 #28
0
 void ISerializable.GetData(SerializeData data)
 {
     data.SetValue("Table", TableName);
     data.SetValue("SubQuery", SubQuery);
     data.SetValue("JoinType", (int)JoinType);
     data.SetValue("On", OnExpression);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("TableName", TableName);
     data.SetValue("CursorName", CursorName);
 }
예제 #30
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("ViewName", ViewName);
     data.SetValue("IfExists", IfExists);
 }
예제 #31
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("TriggerName", TriggerName);
 }
예제 #32
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Columns", ColumnNames);
     data.SetValue("Ascending", Ascending);
 }
 protected override void GetData(SerializeData data)
 {
     data.SetValue("Reference", ReferenceName);
 }
예제 #34
0
 protected override void GetData(SerializeData data)
 {
     data.SetValue("LeftColumn", LeftColumnName);
     data.SetValue("Operator", (int)Operator);
     data.SetValue("RightExpression", RightExpression);
 }