<% 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 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
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 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 clients to manage data using Java servers without having to
create Java implementations of your .NET 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 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 Geode PDX Autoserializer](dotnet-pdx-autoserializer.html)
- [Using the IPdxSerializable Interface](serialize-using-ipdxserializable.html)
- [IPdxSerializable Examples](pdx-serializable-examples.html)
