---
title:  Serializing Data with PDX Serialization
---

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

PDX is a cross-language data format that can reduce the cost of
distributing and serializing your objects. PDX stores data in named
fields that you can access individually to avoid the cost of
deserializing the entire data object. When you use PDX serialization
with the C++ client API, you can implement PDX serialization for each
domain object or register a `PdxSerializer` for the entire cache.

You can also set the object preference of the cache to the `PdxInstance` type, which allows you to access fields of a PDX object without deserializing the entire object.

-   **[Serialize Using the PdxSerializable Class](pdxserializable-interface.html)**

    Domain classes need to inherit the `PdxSerializable` abstract class to serialize and de-serialize the object. When you write objects using PDX serialization, they are distributed to the server tier in PDX serialized form.

-   **[Serialize Your Domain Objects with PdxSerializer and PdxWrapper](using-pdxserializer.html)**

    For domain objects that you cannot or do not want to modify, use the `PdxSerializer` and the `PdxWrapper` classes to serialize and deserialize the object's fields.

-   **[Programming Your Application to Use PdxInstances](using-pdxinstance.html)**

    A `PdxInstance` is a lightweight wrapper around the raw bytes of the PDX serialized objects kept in the cache. It provides applications with run-time access to files of a PDX serialized object. <%=vars.product_name%> provides the implementation of the `PdxInstance` class.

-   **[Configuring PDX to Ignore Unread Fields During Deserialization](pdx-ignore-unread-fields.html)**

    Use the `setPdxIgnoreUnreadFields` API to control whether PDX ignores fields that were unread during deserialization.

-   **[Using PdxInstanceFactory to Create PdxInstances](using-pdxinstancefactory.html)**

    You can use the `PdxInstanceFactory` API to create a `PdxInstance` from raw data when the domain class is not available on the server.

-   **[Using C++ Enum Type with PDX Serialization](using-enum-type-with-pdx.html)**

    Because there is no "object" base type in C++, enums cannot be directly passed as parameters to the `writeObject` and `readObject` API.

-   **[Using PDX Serialization with Delta Propagation](pdx-with-delta-propagation.html)**

    To use delta propagation with PDX serialization, you must implement the `Delta` interface methods.


