<% set_title(product_name, "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.
-->

<%=vars.product_name%>'s Portable Data eXchange (PDX) is a cross-language data format that can reduce the cost of distributing and serializing your objects.

<%=vars.product_name%> .NET Framework PDX serialization:

- Is <a href="#pdx-ser-portability">interoperable with other languages by <%=vars.product_name%></a> -- no need to program a Java-side implementation

- <a href="#pdx-ser-reduced-deserialization">Reduces
  deserialization overhead</a> by providing direct field access on servers of serialized data,
  without full deserialization. Stores data in named fields that you can access individually, to
  avoid the cost of deserializing the entire data object

- <a href="#pdx-ser-delta-prop">Works with <%=vars.product_name%> delta propagation</a>

The simplest option is to use [automatic serialization](dotnet-pdx-autoserializer.html) by
registering the <%=vars.product_name%> .NET Framework PDX reflection-based autoserializer in your
application. When you have an autoserializer,
<%=vars.product_name%> uses it for all domain objects that are not separately treated under the
IPDXSerializable interface.

For greater control, you can specify individual treatment for domain objects using the `IPdxSerializable` interface.
Objects derived from the `IPdxSerializable` interface are not subject to autoserialization.

## <a id="pdx-ser-portability"></a>Portability of PDX Serializable Objects

When you create an `IPdxSerializable` object, <%=vars.product_name%> stores the object's type
information in a central registry. The information is passed between peers, between clients and
servers, and between distributed systems.

This offers a notable advantage to the .NET Framework client, which shares data with Java cache
servers. When using PDX serialization, clients automatically pass registry information to servers
when they store an `IPdxSerializable` object. Clients can run queries and functions against the
data in the servers without the servers needing to know anything about the stored objects. One
client can store data on the server to be retrieved by another client, with the server never
needing to know the object type. This means you can code your .NET Framework clients to manage data
using Java servers without having to create Java implementations of your .NET Framework domain
objects.

## <a id="pdx-ser-reduced-deserialization"></a>Reduced Deserialization of Serialized Objects

The access methods for `IPdxSerializable` objects allow you to examine specific fields of your
domain object without deserializing the entire object. This can reduce 
deserialization costs significantly. Client .NET Framework apps can run queries and execute
functions against the objects in the server caches without deserializing the entire object on the
server side. The query engine automatically recognizes PDX objects and uses only the fields it
needs.

Clients can execute Java functions on server data that only access parts of the domain objects by using `PdxInstance.`

Likewise, peers can access just the fields needed from the serialized object, keeping the object
stored in the cache in serialized form.

## <a id="pdx-ser-delta-prop"></a>Delta Propagation with PDX Serialization

You can use <%=vars.product_name%> delta propagation with PDX serialization.

## <a id='pdx-ser-details'></a>PDX Serialization Details

See the following sections for details on implementing PDX serialization and autoserialization:

- [Using the <%=vars.product_name%> Autoserializer](dotnet-pdx-autoserializer.html)
- [Using the IPdxSerializable Interface](serialize-using-ipdxserializable.html)
- [IPdxSerializable Example](pdx-serializable-examples.html)
