public static void Write(this System.IO.BinaryWriter writer, IConditionTreeItem value) { if (value == ConditionTree.Empty) { writer.Write((byte)0); // 0 for empty } else if (value is ConditionTree) { writer.Write((byte)1); // 1 for tree var tree = value as ConditionTree; writer.Write((ushort)tree.Operator); writer.Write(tree.Left); writer.Write(tree.Right); } else if (value is ConditionTreeLeaf) { var condition = value as ConditionTreeLeaf; writer.Write((byte)2); // 0 for condition writer.Write((int)condition.Type); writer.Write((int)condition.Comparison); writer.Write(condition.VariableName); writer.WriteType(condition.CompareTo); } }