Export all contact data
The right to data portability gives individuals the right to obtain and reuse their personal data for either their own use or to be used for a different service. Use expand options to retrieve all available data for a single contact, including facets and interactions.
Important
Exported JSON will include PII (Personally Identifiable Information) if you choose to extract facets marked [PIISensitive]
.
The following example demonstrates how to export a contact’s data to JSON, including facets and interactions. The example uses the client.Model.Facets
property to build a list of contact and interaction facets to return. This property returns facet keys that are available in the current model. In a Sitecore context, models are loaded from a configuration file. When instantiating the xConnect Client API in a non-Sitecore context, you can pass an array of models into the XConnectClientConfiguration
object.
using Newtonsoft.Json; using Sitecore.XConnect; using Sitecore.XConnect.Client; using Sitecore.XConnect.Client.Serialization; using System; using System.Linq; namespace Documentation.Examples { class GetAllData { public async void AsyncExample() { try { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactReference = new IdentifiedContactReference("twitter", "myrtlemcsitecore"); // Get all available contact facets in current model var contactFacets = client.Model.Facets.Where(c => c.Target == EntityType.Contact).Select(x => x.Name); // Get all available interaction facets in current model var interactionFacets = client.Model.Facets.Where(c => c.Target == EntityType.Interaction).Select(x => x.Name); var contact = await client.GetAsync<Contact>(contactReference, new ContactExecutionOptions(new ContactExpandOptions(contactFacets.ToArray()) { Interactions = new RelatedInteractionsExpandOptions(interactionFacets.ToArray()) { // Get all interactions EndDateTime = DateTime.MaxValue, StartDateTime = DateTime.MinValue } })); // Serialize response // Note special XdbJsonContractResolver - mandatory for serializing xConnect entities var serializerSettings = new JsonSerializerSettings { ContractResolver = new XdbJsonContractResolver(client.Model, serializeFacets: true, serializeContactInteractions: true), Formatting = Formatting.Indented, DateTimeZoneHandling = DateTimeZoneHandling.Utc, DefaultValueHandling = DefaultValueHandling.Ignore }; string allData = JsonConvert.SerializeObject(contact, serializerSettings); string name = "ContactData.json"; System.IO.File.WriteAllText(name, allData); } catch (XdbExecutionException ex) { Console.WriteLine("An error occurred"); } } } catch (XdbExecutionException ex) { // Handle exception } } public void SyncExample() { try { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactReference = new IdentifiedContactReference("twitter", "myrtlemcsitecore"); // Get all available contact facets in current model var contactFacets = client.Model.Facets.Where(c => c.Target == EntityType.Contact).Select(x => x.Name); // Get all available interaction facets in current model var interactionFacets = client.Model.Facets.Where(c => c.Target == EntityType.Interaction).Select(x => x.Name); var contact = client.Get<Contact>(contactReference, new ContactExecutionOptions(new ContactExpandOptions(contactFacets.ToArray()) { Interactions = new RelatedInteractionsExpandOptions(interactionFacets.ToArray()) { // Get all interactions EndDateTime = DateTime.MaxValue, StartDateTime = DateTime.MinValue } })); // Serialize response // Note special XdbJsonContractResolver - mandatory for serializing xConnect entities var serializerSettings = new JsonSerializerSettings { ContractResolver = new XdbJsonContractResolver(client.Model, serializeFacets: true, serializeContactInteractions: true), Formatting = Formatting.Indented, DateTimeZoneHandling = DateTimeZoneHandling.Utc, DefaultValueHandling = DefaultValueHandling.Ignore }; string allData = JsonConvert.SerializeObject(contact, serializerSettings); string name = "ContactData.json"; System.IO.File.WriteAllText(name, allData); } catch (XdbExecutionException ex) { Console.WriteLine("An error occurred"); } } } catch (XdbExecutionException ex) { // Handle exception } } } }