You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/11/11 10:15:02 UTC

[20/25] ignite git commit: IGNITE-1845: Adopted new binary API in .Net.

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeConfiguration.cs
new file mode 100644
index 0000000..967aa52
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeConfiguration.cs
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+
+    /// <summary>
+    /// Binary type configuration.
+    /// </summary>
+    public class BinaryTypeConfiguration
+    {
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        public BinaryTypeConfiguration()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        /// <param name="typeName">Type name.</param>
+        public BinaryTypeConfiguration(string typeName)
+        {
+            TypeName = typeName;
+        }
+
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        /// <param name="type">Type.</param> 
+        public BinaryTypeConfiguration(Type type)
+        {
+            TypeName = type.AssemblyQualifiedName;
+        }
+
+        /// <summary>
+        /// Copying constructor.
+        /// </summary>
+        /// <param name="cfg">Configuration to copy.</param>
+        public BinaryTypeConfiguration(BinaryTypeConfiguration cfg)
+        {
+            AffinityKeyFieldName = cfg.AffinityKeyFieldName;
+            IdMapper = cfg.IdMapper;
+            NameMapper = cfg.NameMapper;
+            Serializer = cfg.Serializer;
+            TypeName = cfg.TypeName;
+            KeepDeserialized = cfg.KeepDeserialized;
+        }
+
+        /// <summary>
+        /// Fully qualified type name. 
+        /// </summary>
+        public string TypeName { get; set; }
+
+        /// <summary>
+        /// Name mapper for the given type. 
+        /// </summary>
+        public IBinaryNameMapper NameMapper { get; set; }
+
+        /// <summary>
+        /// ID mapper for the given type. When it is necessary to resolve class (field) ID, then 
+        /// this property will be checked first. 
+        /// Otherwise, ID will be hash code of the class (field) simple name in lower case. 
+        /// </summary>
+        public IBinaryIdMapper IdMapper { get; set; }
+
+        /// <summary>
+        /// Serializer for the given type. If not provided and class implements <see cref="IBinarizable" />
+        /// then its custom logic will be used. If not provided and class doesn't implement <see cref="IBinarizable" />
+        /// then all fields of the class except of those with [NotSerialized] attribute will be serialized
+        /// with help of reflection.
+        /// </summary>
+        public IBinarySerializer Serializer { get; set; }
+
+        /// <summary>
+        /// Affinity key field name.
+        /// </summary>
+        public string AffinityKeyFieldName { get; set; }
+
+        /// <summary>
+        /// Keep deserialized flag. If set to non-null value, overrides default value set in 
+        /// <see cref="BinaryTypeConfiguration"/>.
+        /// </summary>
+        public bool? KeepDeserialized { get; set; }
+
+        /// <summary>
+        /// Returns a string that represents the current object.
+        /// </summary>
+        /// <returns>
+        /// A string that represents the current object.
+        /// </returns>
+        public override string ToString()
+        {
+            return typeof (BinaryTypeConfiguration).Name + " [TypeName=" + TypeName +
+                   ", NameMapper=" + NameMapper + ", IdMapper=" + IdMapper + ", Serializer=" + Serializer +
+                   ", AffinityKeyFieldName=" + AffinityKeyFieldName + ']';
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeNames.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeNames.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeNames.cs
new file mode 100644
index 0000000..f3d4ea6
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryTypeNames.cs
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    /// <summary>
+    /// Binary type name constants.
+    /// </summary>
+    public static class BinaryTypeNames
+    {
+        /** Type name: boolean. */
+        public const string TypeNameBool = "boolean";
+
+        /** Type name: byte. */
+        public const string TypeNameByte = "byte";
+
+        /** Type name: short. */
+        public const string TypeNameShort = "short";
+
+        /** Type name: char. */
+        public const string TypeNameChar = "char";
+
+        /** Type name: int. */
+        public const string TypeNameInt = "int";
+
+        /** Type name: long. */
+        public const string TypeNameLong = "long";
+
+        /** Type name: float. */
+        public const string TypeNameFloat = "float";
+
+        /** Type name: double. */
+        public const string TypeNameDouble = "double";
+
+        /** Type name: decimal. */
+        public const string TypeNameDecimal = "decimal";
+
+        /** Type name: String. */
+        public const string TypeNameString = "String";
+
+        /** Type name: UUID. */
+        public const string TypeNameGuid = "UUID";
+
+        /** Type name: date. */
+        public const string TypeNameDate = "Date";
+
+        /** Type name: timestamp. */
+        public const string TypeNameTimestamp = "Timestamp";
+
+        /** Type name: Enum. */
+        public const string TypeNameEnum = "Enum";
+
+        /** Type name: Object. */
+        public const string TypeNameObject = "Object";
+
+        /** Type name: boolean array. */
+        public const string TypeNameArrayBool = "boolean[]";
+
+        /** Type name: byte array. */
+        public const string TypeNameArrayByte = "byte[]";
+
+        /** Type name: short array. */
+        public const string TypeNameArrayShort = "short[]";
+
+        /** Type name: char array. */
+        public const string TypeNameArrayChar = "char[]";
+
+        /** Type name: int array. */
+        public const string TypeNameArrayInt = "int[]";
+
+        /** Type name: long array. */
+        public const string TypeNameArrayLong = "long[]";
+
+        /** Type name: float array. */
+        public const string TypeNameArrayFloat = "float[]";
+
+        /** Type name: double array. */
+        public const string TypeNameArrayDouble = "double[]";
+
+        /** Type name: decimal array. */
+        public const string TypeNameArrayDecimal = "decimal[]";
+
+        /** Type name: String array. */
+        public const string TypeNameArrayString = "String[]";
+
+        /** Type name: UUID array. */
+        public const string TypeNameArrayGuid = "UUID[]";
+
+        /** Type name: timestamp array. */
+        public const string TypeNameArrayDate = "Date[]";
+
+        /** Type name: timestamp array. */
+        public const string TypeNameArrayTimestamp = "Timestamp[]";
+
+        /** Type name: Enum array. */
+        public const string TypeNameArrayEnum = "Enum[]";
+
+        /** Type name: Object array. */
+        public const string TypeNameArrayObject = "Object[]";
+
+        /** Type name: Collection. */
+        public const string TypeNameCollection = "Collection";
+
+        /** Type name: Map. */
+        public const string TypeNameMap = "Map";
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarizable.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarizable.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarizable.cs
new file mode 100644
index 0000000..98cc8c2
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarizable.cs
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    /// <summary>
+    /// Interface to implement custom serialization logic.
+    /// </summary>
+    public interface IBinarizable 
+    {
+        /// <summary>
+        /// Writes this object to the given writer.
+        /// </summary> 
+        /// <param name="writer">Writer.</param>
+        /// <exception cref="System.IO.IOException">If write failed.</exception>
+        void WriteBinary(IBinaryWriter writer);
+
+        /// <summary>
+        /// Reads this object from the given reader.
+        /// </summary> 
+        /// <param name="reader">Reader.</param>
+        /// <exception cref="System.IO.IOException">If read failed.</exception>
+        void ReadBinary(IBinaryReader reader);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryIdMapper.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryIdMapper.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryIdMapper.cs
new file mode 100644
index 0000000..9081512
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryIdMapper.cs
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    /// <summary>
+    /// Maps class name and class field names to integer identifiers.
+    /// </summary>
+    public interface IBinaryIdMapper
+    {
+        /// <summary>
+        /// Gets type ID for the given type.
+        /// </summary>
+        /// <param name="typeName">Full type name.</param>
+        /// <returns>ID of the class or 0 in case hash code is to be used.</returns>
+        int GetTypeId(string typeName);
+
+        /// <summary>
+        /// Gets field ID for the given field of the given class.
+        /// </summary>
+        /// <param name="typeId">Type ID.</param>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>ID of the field or null in case hash code is to be used.</returns>
+        int GetFieldId(int typeId, string fieldName);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryNameMapper.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryNameMapper.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryNameMapper.cs
new file mode 100644
index 0000000..f616ab7
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryNameMapper.cs
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    /// <summary>
+    /// Maps type and field names to different names.
+    /// </summary>
+    public interface IBinaryNameMapper
+    {
+        /// <summary>
+        /// Gets the type name.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <returns>Type name.</returns>
+        string GetTypeName(string name);
+
+        /// <summary>
+        /// Gets the field name.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <returns>Field name.</returns>
+        string GetFieldName(string name);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObject.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObject.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObject.cs
new file mode 100644
index 0000000..bd60e28
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObject.cs
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System.Diagnostics.CodeAnalysis;
+
+    /// <summary>
+    /// Wrapper for serialized objects.
+    /// </summary>
+    public interface IBinaryObject
+    {
+        /// <summary>
+        /// Gets binary object type ID.
+        /// </summary>
+        /// <value>
+        /// Type ID.
+        /// </value>
+        int TypeId { get; }
+
+        /// <summary>
+        /// Gets object metadata.
+        /// </summary>
+        /// <returns>Metadata.</returns>
+        [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate",
+            Justification = "Expensive operation.")]
+        IBinaryType GetBinaryType();
+
+        /// <summary>
+        /// Gets field value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>
+        /// Field value.
+        /// </returns>
+        TF GetField<TF>(string fieldName);
+
+        /// <summary>
+        /// Gets fully deserialized instance of binary object.
+        /// </summary>
+        /// <returns>
+        /// Fully deserialized instance of binary object.
+        /// </returns>
+        T Deserialize<T>();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObjectBuilder.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObjectBuilder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObjectBuilder.cs
new file mode 100644
index 0000000..abb9149
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryObjectBuilder.cs
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+    using System.Collections;
+
+    /// <summary>
+    /// binary object builder. Provides ability to build binary objects dynamically
+    /// without having class definitions.
+    /// <para />
+    /// Note that type ID is required in order to build binary object. Usually it is
+    /// enough to provide a simple type name and Ignite will generate the type ID
+    /// automatically.
+    /// </summary>
+    public interface IBinaryObjectBuilder
+    {
+        /// <summary>
+        /// Get object field value. If value is another binary object, then
+        /// builder for this object will be returned. If value is a container
+        /// for other objects (array, ICollection, IDictionary), then container
+        /// will be returned with primitive types in deserialized form and
+        /// binary objects as builders. Any change in builder or collection
+        /// returned through this method will be reflected in the resulting
+        /// binary object after build.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Field value.</returns>
+        T GetField<T>(string fieldName);
+
+        /// <summary>
+        /// Set object field value. Value can be of any type including other
+        /// <see cref="IBinaryObject"/> and other builders.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Field value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetField<T>(string fieldName, T val);
+
+        /// <summary>
+        /// Remove object field.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder RemoveField(string fieldName);
+
+        /// <summary>
+        /// Set explicit hash code. If builder creating object from scratch,
+        /// then hash code initially set to 0. If builder is created from
+        /// exising binary object, then hash code of that object is used
+        /// as initial value.
+        /// </summary>
+        /// <param name="hashCode">Hash code.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetHashCode(int hashCode);
+
+        /// <summary>
+        /// Build the object.
+        /// </summary>
+        /// <returns>Resulting binary object.</returns>
+        IBinaryObject Build();
+
+        /// <summary>
+        /// Sets the array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val);
+
+        /// <summary>
+        /// Sets the boolean field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetBooleanField(string fieldName, bool val);
+
+        /// <summary>
+        /// Sets the boolean array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val);
+
+        /// <summary>
+        /// Sets the byte field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetByteField(string fieldName, byte val);
+
+        /// <summary>
+        /// Sets the byte array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val);
+
+        /// <summary>
+        /// Sets the char field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetCharField(string fieldName, char val);
+
+        /// <summary>
+        /// Sets the char array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val);
+
+        /// <summary>
+        /// Sets the collection field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val);
+
+        /// <summary>
+        /// Sets the decimal field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetDecimalField(string fieldName, decimal? val);
+
+        /// <summary>
+        /// Sets the decimal array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal?[] val);
+
+        /// <summary>
+        /// Sets the dictionary field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val);
+
+        /// <summary>
+        /// Sets the double field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetDoubleField(string fieldName, double val);
+
+        /// <summary>
+        /// Sets the double array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val);
+
+        /// <summary>
+        /// Sets the enum field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val);
+
+        /// <summary>
+        /// Sets the enum array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val);
+
+        /// <summary>
+        /// Sets the float field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetFloatField(string fieldName, float val);
+
+        /// <summary>
+        /// Sets the float array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetFloatArrayField(string fieldName, float[] val);
+
+        /// <summary>
+        /// Sets the guid field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetGuidField(string fieldName, Guid? val);
+
+        /// <summary>
+        /// Sets the guid array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetGuidArrayField(string fieldName, Guid?[] val);
+
+        /// <summary>
+        /// Sets the int field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetIntField(string fieldName, int val);
+
+        /// <summary>
+        /// Sets the int array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetIntArrayField(string fieldName, int[] val);
+
+        /// <summary>
+        /// Sets the long field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetLongField(string fieldName, long val);
+
+        /// <summary>
+        /// Sets the long array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetLongArrayField(string fieldName, long[] val);
+
+        /// <summary>
+        /// Sets the short field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetShortField(string fieldName, short val);
+
+        /// <summary>
+        /// Sets the short array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetShortArrayField(string fieldName, short[] val);
+
+        /// <summary>
+        /// Sets the string field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetStringField(string fieldName, string val);
+
+        /// <summary>
+        /// Sets the string array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetStringArrayField(string fieldName, string[] val);
+
+        /// <summary>
+        /// Sets the timestamp field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetTimestampField(string fieldName, DateTime? val);
+
+        /// <summary>
+        /// Sets the timestamp array field.
+        /// </summary>
+        /// <param name="fieldName">Name of the field.</param>
+        /// <param name="val">The value.</param>
+        /// <returns>Current builder instance.</returns>
+        IBinaryObjectBuilder SetTimestampArrayField(string fieldName, DateTime?[] val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawReader.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawReader.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawReader.cs
new file mode 100644
index 0000000..a719e36
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawReader.cs
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+    using System.Collections;
+
+    /// <summary>
+    /// Raw reader for binary objects. 
+    /// </summary>
+    public interface IBinaryRawReader
+    {
+        /// <summary>
+        /// Read byte value. 
+        /// </summary>
+        /// <returns>Byte value.</returns>
+        byte ReadByte();
+
+        /// <summary>
+        /// Read byte array. 
+        /// </summary>
+        /// <returns>Byte array.</returns>
+        byte[] ReadByteArray();
+
+        /// <summary>
+        /// Read char value. 
+        /// </summary>
+        /// <returns>Char value.</returns>
+        char ReadChar();
+
+        /// <summary>
+        /// Read char array. 
+        /// </summary>
+        /// <returns>Char array.</returns>
+        char[] ReadCharArray();
+
+        /// <summary>
+        /// Read short value. 
+        /// </summary>
+        /// <returns>Short value.</returns>
+        short ReadShort();
+
+        /// <summary>
+        /// Read short array. 
+        /// </summary>
+        /// <returns>Short array.</returns>
+        short[] ReadShortArray();
+
+        /// <summary>
+        /// Read int value. 
+        /// </summary>
+        /// <returns>Int value.</returns>
+        int ReadInt();
+
+        /// <summary>
+        /// Read int array. 
+        /// </summary>
+        /// <returns>Int array.</returns>
+        int[] ReadIntArray();
+
+        /// <summary>
+        /// Read long value. 
+        /// </summary>
+        /// <returns>Long value.</returns>
+        long ReadLong();
+
+        /// <summary>
+        /// Read long array. 
+        /// </summary>
+        /// <returns>Long array.</returns>
+        long[] ReadLongArray();
+
+        /// <summary>
+        /// Read boolean value. 
+        /// </summary>
+        /// <returns>Boolean value.</returns>
+        bool ReadBoolean();
+
+        /// <summary>
+        /// Read boolean array. 
+        /// </summary>
+        /// <returns>Boolean array.</returns>
+        bool[] ReadBooleanArray();
+
+        /// <summary>
+        /// Read float value. 
+        /// </summary>
+        /// <returns>Float value.</returns>
+        float ReadFloat();
+
+        /// <summary>
+        /// Read float array. 
+        /// </summary>
+        /// <returns>Float array.</returns>
+        float[] ReadFloatArray();
+
+        /// <summary>
+        /// Read double value. 
+        /// </summary>
+        /// <returns>Double value.</returns>
+        double ReadDouble();
+
+        /// <summary>
+        /// Read double array. 
+        /// </summary>
+        /// <returns>Double array.</returns>
+        double[] ReadDoubleArray();
+
+        /// <summary>
+        /// Read decimal value. 
+        /// </summary>
+        /// <returns>Decimal value.</returns>
+        decimal? ReadDecimal();
+
+        /// <summary>
+        /// Read decimal array. 
+        /// </summary>
+        /// <returns>Decimal array.</returns>
+        decimal?[] ReadDecimalArray();
+
+        /// <summary>
+        /// Read date value in UTC form. Shortcut for <c>ReadTimestamp(false)</c>.
+        /// </summary>
+        /// <returns>Date value.</returns>
+        DateTime? ReadTimestamp();
+        
+        /// <summary>
+        /// Read date array in UTC form. Shortcut for <c>ReadTimestampArray(false)</c>.
+        /// </summary>
+        /// <returns>Date array.</returns>
+        DateTime?[] ReadTimestampArray();
+        
+        /// <summary>
+        /// Read string value. 
+        /// </summary>
+        /// <returns>String value.</returns>
+        string ReadString();
+
+        /// <summary>
+        /// Read string array. 
+        /// </summary>
+        /// <returns>String array.</returns>
+        string[] ReadStringArray();
+
+        /// <summary>
+        /// Read GUID value. 
+        /// </summary>
+        /// <returns>GUID value.</returns>
+        Guid? ReadGuid();
+
+        /// <summary>
+        /// Read GUID array. 
+        /// </summary>
+        /// <returns>GUID array.</returns>
+        Guid?[] ReadGuidArray();
+
+        /// <summary>
+        /// Read enum value.
+        /// </summary>
+        /// <returns>Enum value.</returns>
+        T ReadEnum<T>();
+
+        /// <summary>
+        /// Read enum array.
+        /// </summary>
+        /// <returns>Enum array.</returns>
+        T[] ReadEnumArray<T>();
+        
+        /// <summary>
+        /// Read object. 
+        /// </summary>
+        /// <returns>Object.</returns>
+        T ReadObject<T>();
+
+        /// <summary>
+        /// Read object array. 
+        /// </summary>
+        /// <returns>Object array.</returns>
+        T[] ReadArray<T>();
+
+        /// <summary>
+        /// Read collection.
+        /// </summary>
+        /// <returns>Collection.</returns>
+        ICollection ReadCollection();
+
+        /// <summary>
+        /// Read collection.
+        /// </summary>
+        /// <param name="factory">Factory.</param>
+        /// <param name="adder">Adder.</param>
+        /// <returns>Collection.</returns>
+        ICollection ReadCollection(CollectionFactory factory, CollectionAdder adder);
+
+        /// <summary>
+        /// Read dictionary. 
+        /// </summary>
+        /// <returns>Dictionary.</returns>
+        IDictionary ReadDictionary();
+
+        /// <summary>
+        /// Read dictionary.
+        /// </summary>
+        /// <param name="factory">Factory.</param>
+        /// <returns>Dictionary.</returns>
+        IDictionary ReadDictionary(DictionaryFactory factory);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawWriter.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawWriter.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawWriter.cs
new file mode 100644
index 0000000..00b49f5
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryRawWriter.cs
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+    using System.Collections;
+
+    /// <summary>
+    /// Raw writer for binary objects. 
+    /// </summary>
+    public interface IBinaryRawWriter
+    {
+        /// <summary>
+        /// Write byte value.
+        /// </summary>
+        /// <param name="val">Byte value.</param>
+        void WriteByte(byte val);
+
+        /// <summary>
+        /// Write byte array.
+        /// </summary>
+        /// <param name="val">Byte array.</param>
+        void WriteByteArray(byte[] val);
+
+        /// <summary>
+        /// Write char value.
+        /// </summary>
+        /// <param name="val">Char value.</param>
+        void WriteChar(char val);
+
+        /// <summary>
+        /// Write char array.
+        /// </summary>
+        /// <param name="val">Char array.</param>
+        void WriteCharArray(char[] val);
+
+        /// <summary>
+        /// Write short value.
+        /// </summary>
+        /// <param name="val">Short value.</param>
+        void WriteShort(short val);
+
+        /// <summary>
+        /// Write short array.
+        /// </summary>
+        /// <param name="val">Short array.</param>
+        void WriteShortArray(short[] val);
+
+        /// <summary>
+        /// Write int value.
+        /// </summary>
+        /// <param name="val">Int value.</param>
+        void WriteInt(int val);
+
+        /// <summary>
+        /// Write int array.
+        /// </summary>
+        /// <param name="val">Int array.</param>
+        void WriteIntArray(int[] val);
+
+        /// <summary>
+        /// Write long value.
+        /// </summary>
+        /// <param name="val">Long value.</param>
+        void WriteLong(long val);
+
+        /// <summary>
+        /// Write long array.
+        /// </summary>
+        /// <param name="val">Long array.</param>
+        void WriteLongArray(long[] val);
+
+        /// <summary>
+        /// Write boolean value.
+        /// </summary>
+        /// <param name="val">Boolean value.</param>
+        void WriteBoolean(bool val);
+
+        /// <summary>
+        /// Write boolean array.
+        /// </summary>
+        /// <param name="val">Boolean array.</param>
+        void WriteBooleanArray(bool[] val);
+
+        /// <summary>
+        /// Write float value.
+        /// </summary>
+        /// <param name="val">Float value.</param>
+        void WriteFloat(float val);
+
+        /// <summary>
+        /// Write float array.
+        /// </summary>
+        /// <param name="val">Float array.</param>
+        void WriteFloatArray(float[] val);
+
+        /// <summary>
+        /// Write double value.
+        /// </summary>
+        /// <param name="val">Double value.</param>
+        void WriteDouble(double val);
+
+        /// <summary>
+        /// Write double array.
+        /// </summary>
+        /// <param name="val">Double array.</param>
+        void WriteDoubleArray(double[] val);
+
+        /// <summary>
+        /// Write decimal value.
+        /// </summary>
+        /// <param name="val">Decimal value.</param>
+        void WriteDecimal(decimal? val);
+
+        /// <summary>
+        /// Write decimal array.
+        /// </summary>
+        /// <param name="val">Decimal array.</param>
+        void WriteDecimalArray(decimal?[] val);
+
+        /// <summary>
+        /// Write date value.
+        /// </summary>
+        /// <param name="val">Date value.</param>
+        void WriteTimestamp(DateTime? val);
+
+        /// <summary>
+        /// Write date array.
+        /// </summary>
+        /// <param name="val">Date array.</param>
+        void WriteTimestampArray(DateTime?[] val);
+
+        /// <summary>
+        /// Write string value.
+        /// </summary>
+        /// <param name="val">String value.</param>
+        void WriteString(string val);
+
+        /// <summary>
+        /// Write string array.
+        /// </summary>
+        /// <param name="val">String array.</param>
+        void WriteStringArray(string[] val);
+
+        /// <summary>
+        /// Write GUID value.
+        /// </summary>
+        /// <param name="val">GUID value.</param>
+        void WriteGuid(Guid? val);
+
+        /// <summary>
+        /// Write GUID array.
+        /// </summary>
+        /// <param name="val">GUID array.</param>
+        void WriteGuidArray(Guid?[] val);
+
+        /// <summary>
+        /// Write enum value.
+        /// </summary>
+        /// <param name="val">Enum value.</param>
+        void WriteEnum<T>(T val);
+
+        /// <summary>
+        /// Write enum array.
+        /// </summary>
+        /// <param name="val">Enum array.</param>
+        void WriteEnumArray<T>(T[] val);
+
+        /// <summary>
+        /// Write object value.
+        /// </summary>
+        /// <param name="val">Object value.</param>
+        void WriteObject<T>(T val);
+
+        /// <summary>
+        /// Write object array.
+        /// </summary>
+        /// <param name="val">Object array.</param>
+        void WriteArray<T>(T[] val);
+
+        /// <summary>
+        /// Writes a collection in interoperable form.
+        /// 
+        /// Use this method to communicate with other platforms 
+        /// or with nodes that need to read collection elements in binary form.
+        /// 
+        /// When there is no need for binarization or interoperability, please use <see cref="WriteObject{T}" />,
+        /// which will properly preserve generic collection type.
+        /// </summary>
+        /// <param name="val">Collection.</param>
+        void WriteCollection(ICollection val);
+
+        /// <summary>
+        /// Writes a dictionary in interoperable form.
+        /// 
+        /// Use this method to communicate with other platforms 
+        /// or with nodes that need to read dictionary elements in binary form.
+        /// 
+        /// When there is no need for binarization or interoperability, please use <see cref="WriteObject{T}" />,
+        /// which will properly preserve generic dictionary type.
+        /// </summary>
+        /// <param name="val">Dictionary.</param>
+        void WriteDictionary(IDictionary val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryReader.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryReader.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryReader.cs
new file mode 100644
index 0000000..2ccbbc0
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryReader.cs
@@ -0,0 +1,279 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+    using System.Collections;
+
+    /// <summary>
+    /// Delegate for collection creation.
+    /// </summary>
+    /// <param name="size">Collection size.</param>
+    /// <returns>Collection.</returns>
+    public delegate ICollection CollectionFactory(int size);
+
+    /// <summary>
+    /// Delegate for adding element to collection.
+    /// </summary>
+    /// <param name="col">Collection.</param>
+    /// <param name="elem">Element to add.</param>
+    public delegate void CollectionAdder(ICollection col, object elem);
+
+    /// <summary>
+    /// Delegate for dictionary creation.
+    /// </summary>
+    /// <param name="size">Dictionary size.</param>
+    /// <returns>Dictionary.</returns>
+    public delegate IDictionary DictionaryFactory(int size);
+
+    /// <summary>
+    /// Reader for binary objects. 
+    /// </summary>
+    public interface IBinaryReader 
+    {
+        /// <summary>
+        /// Read named byte value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Byte value.</returns>
+        byte ReadByte(string fieldName);
+        
+        /// <summary>
+        /// Read named byte array. 
+        /// </summary>
+        /// <returns>Byte array.</returns>
+        byte[] ReadByteArray(string fieldName);
+        
+        /// <summary>
+        /// Read named char value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Char value.</returns>
+        char ReadChar(string fieldName);
+
+        /// <summary>
+        /// Read named char array. 
+        /// </summary>
+        /// <returns>Char array.</returns>
+        char[] ReadCharArray(string fieldName);
+
+        /// <summary>
+        /// Read named short value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Short value.</returns>
+        short ReadShort(string fieldName);
+
+        /// <summary>
+        /// Read named short array. 
+        /// </summary>
+        /// <returns>Short array.</returns>
+        short[] ReadShortArray(string fieldName);        
+
+        /// <summary>
+        /// Read named int value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Int value.</returns>
+        int ReadInt(string fieldName);
+
+        /// <summary>
+        /// Read named int array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Int array.</returns>
+        int[] ReadIntArray(string fieldName);
+
+        /// <summary>
+        /// Read named long value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Long value.</returns>
+        long ReadLong(string fieldName);
+
+        /// <summary>
+        /// Read named long array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Long array.</returns>
+        long[] ReadLongArray(string fieldName);
+
+        /// <summary>
+        /// Read named boolean value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Boolean value.</returns>
+        bool ReadBoolean(string fieldName);
+
+        /// <summary>
+        /// Read named boolean array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Boolean array.</returns>
+        bool[] ReadBooleanArray(string fieldName);
+
+        /// <summary>
+        /// Read named float value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Float value.</returns>
+        float ReadFloat(string fieldName);
+
+        /// <summary>
+        /// Read named float array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Float array.</returns>
+        float[] ReadFloatArray(string fieldName);
+
+        /// <summary>
+        /// Read named double value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Double value.</returns>
+        double ReadDouble(string fieldName);        
+
+        /// <summary>
+        /// Read named double array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Double array.</returns>
+        double[] ReadDoubleArray(string fieldName);
+
+        /// <summary>
+        /// Read named decimal value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Decimal value.</returns>
+        decimal? ReadDecimal(string fieldName);
+
+        /// <summary>
+        /// Read named decimal array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Decimal array.</returns>
+        decimal?[] ReadDecimalArray(string fieldName);
+
+        /// <summary>
+        /// Read named date value in UTC form.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Date value.</returns>
+        DateTime? ReadTimestamp(string fieldName);
+        
+        /// <summary>
+        /// Read named date array in UTC form.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Date array.</returns>
+        DateTime?[] ReadTimestampArray(string fieldName);
+
+        /// <summary>
+        /// Read named string value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>String value.</returns>
+        string ReadString(string fieldName);
+
+        /// <summary>
+        /// Read named string array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>String array.</returns>
+        string[] ReadStringArray(string fieldName);
+
+        /// <summary>
+        /// Read named GUID value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>GUID value.</returns>
+        Guid? ReadGuid(string fieldName);
+
+        /// <summary>
+        /// Read named GUID array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>GUID array.</returns>
+        Guid?[] ReadGuidArray(string fieldName);
+        
+        /// <summary>
+        /// Read named enum value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Enum value.</returns>
+        T ReadEnum<T>(string fieldName);
+
+        /// <summary>
+        /// Read named enum array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Enum array.</returns>
+        T[] ReadEnumArray<T>(string fieldName);
+
+        /// <summary>
+        /// Read named object.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Object.</returns>
+        T ReadObject<T>(string fieldName);
+
+        /// <summary>
+        /// Read named object array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Object array.</returns>
+        T[] ReadArray<T>(string fieldName);
+
+        /// <summary>
+        /// Read named collection.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Collection.</returns>
+        ICollection ReadCollection(string fieldName);
+
+        /// <summary>
+        /// Read named collection.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="factory">Factory.</param>
+        /// <param name="adder">Adder.</param>
+        /// <returns>Collection.</returns>
+        ICollection ReadCollection(string fieldName, CollectionFactory factory, CollectionAdder adder);
+
+        /// <summary>
+        /// Read named dictionary.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Dictionary.</returns>
+        IDictionary ReadDictionary(string fieldName);
+
+        /// <summary>
+        /// Read named dictionary.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="factory">Factory.</param>
+        /// <returns>Dictionary.</returns>
+        IDictionary ReadDictionary(string fieldName, DictionaryFactory factory);
+
+        /// <summary>
+        /// Get raw reader. 
+        /// </summary>
+        /// <returns>Raw reader.</returns>
+        IBinaryRawReader GetRawReader();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarySerializer.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarySerializer.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarySerializer.cs
new file mode 100644
index 0000000..23dc811
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinarySerializer.cs
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    /// <summary>
+    /// Binary serializer. 
+    /// </summary> 
+    public interface IBinarySerializer
+    {
+        /// <summary>
+        /// Write portalbe object.
+        /// </summary>
+        /// <param name="obj">Object.</param>
+        /// <param name="writer">Poratble writer.</param>
+        void WriteBinary(object obj, IBinaryWriter writer);
+
+        /// <summary>
+        /// Read binary object.
+        /// </summary>
+        /// <param name="obj">Instantiated empty object.</param>
+        /// <param name="reader">Poratble reader.</param>
+        void ReadBinary(object obj, IBinaryReader reader);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryType.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryType.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryType.cs
new file mode 100644
index 0000000..7b34e07
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryType.cs
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System.Collections.Generic;
+
+    /// <summary>
+    /// Binary type metadata.
+    /// </summary>
+    public interface IBinaryType
+    {
+        /// <summary>
+        /// Gets type name.
+        /// </summary>
+        /// <returns>Type name.</returns>
+        string TypeName { get; }
+
+        /// <summary>
+        /// Gets field names for that type.
+        /// </summary>
+        /// <returns>Field names.</returns>
+        ICollection<string> Fields { get; }
+
+        /// <summary>
+        /// Gets field type for the given field name.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <returns>Field type.</returns>
+        string GetFieldTypeName(string fieldName);
+
+        /// <summary>
+        /// Gets optional affinity key field name.
+        /// </summary>
+        /// <returns>Affinity key field name or null in case it is not provided.</returns>
+        string AffinityKeyFieldName { get; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryWriter.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryWriter.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryWriter.cs
new file mode 100644
index 0000000..87454a9
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IBinaryWriter.cs
@@ -0,0 +1,256 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary 
+{
+    using System;
+    using System.Collections;
+
+    /// <summary>
+    /// Writer for binary objects. 
+    /// </summary>
+    public interface IBinaryWriter 
+    {
+        /// <summary>
+        /// Write named byte value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Byte value.</param>
+        void WriteByte(string fieldName, byte val);
+
+        /// <summary>
+        /// Write named byte array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Byte array.</param>
+        void WriteByteArray(string fieldName, byte[] val);
+
+        /// <summary>
+        /// Write named char value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Char value.</param>
+        void WriteChar(string fieldName, char val);
+
+        /// <summary>
+        /// Write named char array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Char array.</param>
+        void WriteCharArray(string fieldName, char[] val);
+
+        /// <summary>
+        /// Write named short value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Short value.</param>
+        void WriteShort(string fieldName, short val);
+
+        /// <summary>
+        /// Write named short array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Short array.</param>
+        void WriteShortArray(string fieldName, short[] val);
+
+        /// <summary>
+        /// Write named int value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Int value.</param>
+        void WriteInt(string fieldName, int val);
+
+        /// <summary>
+        /// Write named int array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Int array.</param>
+        void WriteIntArray(string fieldName, int[] val);
+
+        /// <summary>
+        /// Write named long value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Long value.</param>
+        void WriteLong(string fieldName, long val);
+
+        /// <summary>
+        /// Write named long array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Long array.</param>
+        void WriteLongArray(string fieldName, long[] val);
+
+        /// <summary>
+        /// Write named boolean value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Boolean value.</param>
+        void WriteBoolean(string fieldName, bool val);
+
+        /// <summary>
+        /// Write named boolean array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Boolean array.</param>
+        void WriteBooleanArray(string fieldName, bool[] val);
+
+        /// <summary>
+        /// Write named float value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Float value.</param>
+        void WriteFloat(string fieldName, float val);
+
+        /// <summary>
+        /// Write named float array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Float array.</param>
+        void WriteFloatArray(string fieldName, float[] val);
+
+        /// <summary>
+        /// Write named double value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Double value.</param>
+        void WriteDouble(string fieldName, double val);
+
+        /// <summary>
+        /// Write named double array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Double array.</param>
+        void WriteDoubleArray(string fieldName, double[] val);
+
+        /// <summary>
+        /// Write named decimal value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Decimal value.</param>
+        void WriteDecimal(string fieldName, decimal? val);
+
+        /// <summary>
+        /// Write named decimal array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Decimal array.</param>
+        void WriteDecimalArray(string fieldName, decimal?[] val);
+
+        /// <summary>
+        /// Write named date value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Date value.</param>
+        void WriteTimestamp(string fieldName, DateTime? val);
+
+        /// <summary>
+        /// Write named date array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Date array.</param>
+        void WriteTimestampArray(string fieldName, DateTime?[] val);
+
+        /// <summary>
+        /// Write named string value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">String value.</param>
+        void WriteString(string fieldName, string val);
+
+        /// <summary>
+        /// Write named string array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">String array.</param>
+        void WriteStringArray(string fieldName, string[] val);
+
+        /// <summary>
+        /// Write named GUID value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">GUID value.</param>
+        void WriteGuid(string fieldName, Guid? val);
+
+        /// <summary>
+        /// Write named GUID array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">GUID array.</param>
+        void WriteGuidArray(string fieldName, Guid?[] val);
+
+        /// <summary>
+        /// Write named enum value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Enum value.</param>
+        void WriteEnum<T>(string fieldName, T val);
+
+        /// <summary>
+        /// Write named enum array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Enum array.</param>
+        void WriteEnumArray<T>(string fieldName, T[] val);
+
+        /// <summary>
+        /// Write named object value.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Object value.</param>
+        void WriteObject<T>(string fieldName, T val);
+
+        /// <summary>
+        /// Write named object array.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Object array.</param>
+        void WriteArray<T>(string fieldName, T[] val);
+
+        /// <summary>
+        /// Writes a named collection in interoperable form.
+        /// 
+        /// Use this method to communicate with other platforms 
+        /// or with nodes that need to read collection elements in binary form.
+        /// 
+        /// When there is no need for binarization or interoperability, please use <see cref="WriteObject{T}" />,
+        /// which will properly preserve generic collection type.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Collection.</param>
+        void WriteCollection(string fieldName, ICollection val);
+
+        /// <summary>
+        /// Writes a named dictionary in interoperable form.
+        /// 
+        /// Use this method to communicate with other platforms 
+        /// or with nodes that need to read dictionary elements in binary form.
+        /// 
+        /// When there is no need for binarization or interoperability, please use <see cref="WriteObject{T}" />,
+        /// which will properly preserve generic dictionary type.
+        /// </summary>
+        /// <param name="fieldName">Field name.</param>
+        /// <param name="val">Dictionary.</param>
+        void WriteDictionary(string fieldName, IDictionary val);
+
+        /// <summary>
+        /// Get raw writer. 
+        /// </summary>
+        /// <returns>Raw writer.</returns>
+        IBinaryRawWriter GetRawWriter();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IIgniteBinary.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IIgniteBinary.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IIgniteBinary.cs
new file mode 100644
index 0000000..25ea981
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/IIgniteBinary.cs
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+    using System.Collections.Generic;
+
+    /// <summary>
+    /// Defines binary objects functionality. With binary objects you are able to:
+    /// <list type="bullet">
+    ///     <item>
+    ///         <description>Seamlessly interoperate between Java, .NET, and C++.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Make any object binary with zero code change to your existing code.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Nest binary objects within each other.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Automatically handle <c>circular</c> or <c>null</c> references.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Automatically convert collections and maps between Java, .NET, and C++.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Optionally avoid deserialization of objects on the server side.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Avoid need to have concrete class definitions on the server side.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Dynamically change structure of the classes without having to restart the cluster.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description>Index into binary objects for querying purposes.</description>
+    ///     </item>
+    /// </list>
+    /// </summary>
+    public interface IIgniteBinary
+    {
+        /// <summary>
+        /// Converts provided object to binary form.
+        /// <para />
+        /// Note that object's type needs to be configured in <see cref="BinaryConfiguration"/>.
+        /// </summary>
+        /// <param name="obj">Object to convert.</param>
+        /// <returns>Converted object.</returns>
+        T ToBinary<T>(object obj);
+
+        /// <summary>
+        /// Create builder for the given binary object type. Note that this
+        /// type must be specified in <see cref="BinaryConfiguration"/>.
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns>Builder.</returns>
+        IBinaryObjectBuilder GetBuilder(Type type);
+
+        /// <summary>
+        /// Create builder for the given binary object type name. Note that this
+        /// type name must be specified in <see cref="BinaryConfiguration"/>.
+        /// </summary>
+        /// <param name="typeName">Type name.</param>
+        /// <returns>Builder.</returns>
+        IBinaryObjectBuilder GetBuilder(string typeName);
+
+        /// <summary>
+        /// Create builder over existing binary object.
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <returns>Builder.</returns>
+        IBinaryObjectBuilder GetBuilder(IBinaryObject obj);
+
+        /// <summary>
+        /// Gets type id for the given type name.
+        /// </summary>
+        /// <param name="typeName">Type name.</param>
+        /// <returns>Type id.</returns>
+        int GetTypeId(string typeName);
+
+        /// <summary>
+        /// Gets metadata for all known types.
+        /// </summary>
+        /// <returns>Metadata.</returns>
+        ICollection<IBinaryType> GetBinaryTypes();
+
+        /// <summary>
+        /// Gets metadata for specified type id.
+        /// </summary>
+        /// <returns>Metadata.</returns>
+        IBinaryType GetBinaryType(int typeId);
+
+        /// <summary>
+        /// Gets metadata for specified type name.
+        /// </summary>
+        /// <returns>Metadata.</returns>
+        IBinaryType GetBinaryType(string typeName);
+
+        /// <summary>
+        /// Gets metadata for specified type.
+        /// </summary>
+        /// <returns>Metadata.</returns>
+        IBinaryType GetBinaryType(Type type);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICache.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICache.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICache.cs
index 48bc695..192dabf 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICache.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICache.cs
@@ -73,9 +73,9 @@ namespace Apache.Ignite.Core.Cache
         bool IsEmpty();
 
         /// <summary>
-        /// Gets a value indicating whether to keep values in portable form.
+        /// Gets a value indicating whether to keep values in binary form.
         /// </summary>
-        bool IsKeepPortable { get; }
+        bool IsKeepBinary { get; }
 
         /// <summary>
         /// Get another cache instance with read-through and write-through behavior disabled.
@@ -95,14 +95,14 @@ namespace Apache.Ignite.Core.Cache
         ICache<TK, TV> WithExpiryPolicy(IExpiryPolicy plc);
 
         /// <summary>
-        /// Gets cache with KeepPortable mode enabled, changing key and/or value types if necessary.
-        /// You can only change key/value types when transitioning from non-portable to portable cache;
-        /// Changing type of portable cache is not allowed and will throw an <see cref="InvalidOperationException"/>
+        /// Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary.
+        /// You can only change key/value types when transitioning from non-binary to binary cache;
+        /// Changing type of binary cache is not allowed and will throw an <see cref="InvalidOperationException"/>
         /// </summary>
-        /// <typeparam name="TK1">Key type in portable mode.</typeparam>
-        /// <typeparam name="TV1">Value type in protable mode.</typeparam>
-        /// <returns>Cache instance with portable mode enabled.</returns>
-        ICache<TK1, TV1> WithKeepPortable<TK1, TV1>();
+        /// <typeparam name="TK1">Key type in binary mode.</typeparam>
+        /// <typeparam name="TV1">Value type in binary mode.</typeparam>
+        /// <returns>Cache instance with binary mode enabled.</returns>
+        ICache<TK1, TV1> WithKeepBinary<TK1, TV1>();
 
         /// <summary>
         /// Executes <see cref="LocalLoadCache"/> on all cache nodes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/Continuous/ContinuousQuery.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/Continuous/ContinuousQuery.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/Continuous/ContinuousQuery.cs
index 8f297a2..dbf6c97 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/Continuous/ContinuousQuery.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/Continuous/ContinuousQuery.cs
@@ -115,7 +115,7 @@ namespace Apache.Ignite.Core.Cache.Query.Continuous
         /// returns <c>false</c>, then cache entry event will not be sent to a node where
         /// continuous query has been started.
         /// <para />
-        /// Must be either portable or serializable in case query is not local.
+        /// Must be either binary or serializable in case query is not local.
         /// </summary>
         public ICacheEntryEventFilter<TK, TV> Filter { get; set; }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/QueryBase.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/QueryBase.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/QueryBase.cs
index 3cb9e58..1464589 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/QueryBase.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/QueryBase.cs
@@ -17,8 +17,8 @@
 
 namespace Apache.Ignite.Core.Cache.Query
 {
+    using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cache;
-    using Apache.Ignite.Core.Impl.Portable;
 
     /// <summary>
     /// Base class for all Ignite cache entry queries.
@@ -53,8 +53,8 @@ namespace Apache.Ignite.Core.Cache.Query
         /// Writes this instance to a stream created with a specified delegate.
         /// </summary>
         /// <param name="writer">Writer.</param>
-        /// <param name="keepPortable">Keep portable flag.</param>
-        internal abstract void Write(PortableWriterImpl writer, bool keepPortable);
+        /// <param name="keepBinary">Keep binary flag.</param>
+        internal abstract void Write(BinaryWriter writer, bool keepBinary);
 
         /// <summary>
         /// Gets the interop opcode.
@@ -66,7 +66,7 @@ namespace Apache.Ignite.Core.Cache.Query
         /// </summary>
         /// <param name="writer">Writer.</param>
         /// <param name="args">Arguments.</param>
-        internal static void WriteQueryArgs(PortableWriterImpl writer, object[] args)
+        internal static void WriteQueryArgs(BinaryWriter writer, object[] args)
         {
             if (args == null)
                 writer.WriteInt(0);

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/ScanQuery.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/ScanQuery.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/ScanQuery.cs
index 44f8486..e1478f3 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/ScanQuery.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/ScanQuery.cs
@@ -17,8 +17,8 @@
 
 namespace Apache.Ignite.Core.Cache.Query
 {
+    using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cache;
-    using Apache.Ignite.Core.Impl.Portable;
 
     /// <summary>
     /// Scan query over cache entries. Will accept all the entries if no predicate was set.
@@ -46,7 +46,7 @@ namespace Apache.Ignite.Core.Cache.Query
         public int? Partition { get; set; }
 
         /** <inheritDoc /> */
-        internal override void Write(PortableWriterImpl writer, bool keepPortable)
+        internal override void Write(BinaryWriter writer, bool keepBinary)
         {
             writer.WriteBoolean(Local);
             writer.WriteInt(PageSize);
@@ -61,7 +61,7 @@ namespace Apache.Ignite.Core.Cache.Query
             else
             {
                 var holder = new CacheEntryFilterHolder(Filter, (key, val) => Filter.Invoke(
-                    new CacheEntry<TK, TV>((TK) key, (TV) val)), writer.Marshaller, keepPortable);
+                    new CacheEntry<TK, TV>((TK) key, (TV) val)), writer.Marshaller, keepBinary);
                 
                 writer.WriteObject(holder);
                 writer.WriteLong(holder.Handle);

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/SqlQuery.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/SqlQuery.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/SqlQuery.cs
index 52efc26..69dc7ee 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/SqlQuery.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/SqlQuery.cs
@@ -19,8 +19,8 @@ namespace Apache.Ignite.Core.Cache.Query
 {
     using System;
     using System.Diagnostics.CodeAnalysis;
+    using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cache;
-    using Apache.Ignite.Core.Impl.Portable;
 
     /// <summary>
     /// SQL Query.
@@ -94,7 +94,7 @@ namespace Apache.Ignite.Core.Cache.Query
         public object[] Arguments { get; set; }
 
         /** <inheritDoc /> */
-        internal override void Write(PortableWriterImpl writer, bool keepPortable)
+        internal override void Write(BinaryWriter writer, bool keepBinary)
         {
             if (string.IsNullOrEmpty(Sql))
                 throw new ArgumentException("Sql cannot be null or empty");

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/TextQuery.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/TextQuery.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/TextQuery.cs
index 3f52f6f..8c7880f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/TextQuery.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Query/TextQuery.cs
@@ -18,8 +18,8 @@
 namespace Apache.Ignite.Core.Cache.Query
 {
     using System;
+    using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cache;
-    using Apache.Ignite.Core.Impl.Portable;
 
     /// <summary>
     /// Text query.
@@ -81,7 +81,7 @@ namespace Apache.Ignite.Core.Cache.Query
         public string Text { get; set; }
 
         /** <inheritDoc /> */
-        internal override void Write(PortableWriterImpl writer, bool keepPortable)
+        internal override void Write(BinaryWriter writer, bool keepBinary)
         {
             if (string.IsNullOrEmpty(Text))
                 throw new ArgumentException("Text cannot be null or empty");

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Common/IgniteGuid.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Common/IgniteGuid.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Common/IgniteGuid.cs
index 60a5839..10fbb2e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Common/IgniteGuid.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Common/IgniteGuid.cs
@@ -19,7 +19,7 @@ namespace Apache.Ignite.Core.Common
 {
     using System;
     using System.Globalization;
-    using Apache.Ignite.Core.Portable;
+    using Apache.Ignite.Core.Binary;
 
     /// <summary>
     /// Ignite guid with additional local ID.
@@ -93,7 +93,7 @@ namespace Apache.Ignite.Core.Common
         /// Reads this object from the given reader.
         /// </summary> 
         /// <param name="r">Reader.</param>
-        internal static IgniteGuid? ReadPortable(IPortableRawReader r)
+        internal static IgniteGuid? Read(IBinaryRawReader r)
         {
             var guid = r.ReadGuid();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Compute/ICompute.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Compute/ICompute.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Compute/ICompute.cs
index ad7bbb5..d818153 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Compute/ICompute.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Compute/ICompute.cs
@@ -70,12 +70,12 @@ namespace Apache.Ignite.Core.Compute
         ICompute WithTimeout(long timeout);
 
         /// <summary>
-        /// Sets keep-portable flag for the next executed Java task on this projection in the current
+        /// Sets keep-binary flag for the next executed Java task on this projection in the current
         /// thread so that task argument passed to Java and returned task results will not be
         /// deserialized.
         /// </summary>
         /// <returns>This compute instance for chaining calls.</returns>
-        ICompute WithKeepPortable();
+        ICompute WithKeepBinary();
 
         /// <summary>
         /// Executes given Java task on the grid projection. If task for given name has not been deployed yet,