---
title: "Serialize xConnect entities using JSON.NET"
slug: "serialize-xconnect-entities-using-json-net"
abstract: "How to serialize xConnect entities using JSON.NET with example."
---
# Serialize xConnect entities using JSON.NET

This topic demonstrates how to serialize xConnect entities using JSON.NET. You may want to serialize xConnect objects if:

- You want to cache facets in an external database.
- You have a custom Web API endpoint that reads data using the xConnect client, acts on the data that is returned, and passes the modified data on to another service.

> [!warning]
> Keep international data privacy regulations in mind when writing contact and interaction data to a cache or database - for example, you may wish to avoid serializing contact facets marked `[PIISensitive]`.

To serialize xConnect entities using JSON.NET, define a `JsonSerializerSettings` object as shown and pass this object into the `SerializeObject` method:

```csharp
using Newtonsoft.Json;
using Sitecore.XConnect;
using Sitecore.XConnect.Client.Serialization;

namespace Documentation
{
    public class Serialize
    {
        // Async example
        public async void SerializeEntities()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                var serializerSettings = new JsonSerializerSettings
                {
                    ContractResolver = new XdbJsonContractResolver(client.Model,
                serializeFacets: true,
                serializeContactInteractions: true),
                    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
                    DefaultValueHandling = DefaultValueHandling.Ignore
                };

                var contact = await client.GetAsync<Contact>(new IdentifiedContactReference("twitter", "myrtlesitecore"), new ContactExpandOptions() { });

                JsonConvert.SerializeObject(contact, serializerSettings);
            }
        }
    }
}

```

<details>
<summary><h2>Asynchronous and synchronous extension methods</h2></summary>

In a unit testing context, you can use the `Sitecore.XConnect.Serialization.DeserializationHelpers` class to set read-only properties on the `Contact` and `Interaction` classes. The following example demonstrates how to use the `SetFacet()` method:

```

// New test contact
var contact = new Contact();

// New test contact facet
Sitecore.XConnect.Serialization.DeserializationHelpers.SetFacet(contact, PersonalInformation.DefaultFacetKey, new PersonalInformation() { FirstName = "Myrtle" } );

```

</details>