<% set_title("Using the", product_name, "IDataSerializable Interface") %>

<!--
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.
-->

The .NET `IDataSerializable` interface provides fast and compact data serialization.

<%=vars.product_name%> .NET Data serialization consumes fewer bytes in overhead than  <%=vars.product_name%> .NET PDX serialization,
but incurs higher performance costs of deserialization when performing queries.

-   **[How Serialization Works with IDataSerializable](how-igfserializable-works.html)**

    When your application puts an object into the cache for distribution, <%=vars.product_name%> serializes the data by taking these steps.

-   **[Implement the IDataSerializable Interface](implementing-igfserializable.html)**

    To store your own data types in the cache, you implement the <%=vars.product_name%> `IDataSerializable` interface.

-   **[Register the Type](registering-the-type.html)**

    To use the `BankAccount` type, you must register it with the type system. Then, when an incoming stream contains a `BankAccount`, it can be manufactured from the associated `TypeFactoryMethod.`

-   **[Using a Custom Class With IDataSerializable](custom-class-igfserializable.html)**

    An example shows how to use the BankAccount custom key type and the AccountHistory value type that were previously defined.


