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); }
void ISerializable.GetData(SerializeData data) { data.SetValue("Left", Left); data.SetValue("Right", Right); GetData(data); }
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); } }
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); } }
protected override void GetData(SerializeData data) { data.SetValue("Value", Value); data.SetValue("Type", SqlType); }
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); }
protected override void GetData(SerializeData data) { data.SetValue("ExceptionName", ExceptionName); }
void ISerializable.GetData(SerializeData data) { data.SetValue("Column", ColumnName); }
protected virtual void GetData(SerializeData data) { }
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); }
protected override void GetData(SerializeData data) { data.SetValue("LeftColumns", LeftColumns); data.SetValue("RightColumns", RightColumns); }
void ISerializable.GetData(SerializeData data) { data.SetValue("Password", PasswordExpression); }
void ISerializable.GetData(SerializeData data) { data.SetValue("SourceQuery", SourceQuery); data.SetValue("IsFromQuery", IsFromQuery); GetData(data); }
protected override void GetData(SerializeData data) { data.SetValue("Offset", Offset); data.SetValue("Count", Count); }
void ISerializable.GetData(SerializeData data) { data.SetValue("Constraint", ConstraintName); }
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); }
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); }
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()); }
protected override void GetData(SerializeData data) { data.SetValue("Marker", MarkerName); }
public void GetData(SerializeData graph) { graph.SetValue("value", Value); graph.SetValue("parent", Parent); }
protected override void GetData(SerializeData data) { data.SetValue("TableInfo", typeof(TableInfo), TableInfo); data.SetValue("Temporary", Temporary); data.SetValue("IfNotExists", IfNotExists); }
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); }
protected override void GetData(SerializeData data) { data.SetValue("ViewName", ViewName); data.SetValue("IfExists", IfExists); }
protected override void GetData(SerializeData data) { data.SetValue("TriggerName", TriggerName); }
protected override void GetData(SerializeData data) { data.SetValue("Columns", ColumnNames); data.SetValue("Ascending", Ascending); }
protected override void GetData(SerializeData data) { data.SetValue("Reference", ReferenceName); }
protected override void GetData(SerializeData data) { data.SetValue("LeftColumn", LeftColumnName); data.SetValue("Operator", (int)Operator); data.SetValue("RightExpression", RightExpression); }