Reputation: 478
I am using a typed DocumentQuery to read documents from a collection of an Azure DocumentDb.
from f in client.CreateDocumentQuery<MyModel>(Collection.SelfLink) select f
Because I do not find a way how I can set the neccesarry custom json converter, it throws this exeption:
Could not create an instance of type AbstractObject. Type is an interface or abstract class and cannot be instantiated.
Usually you do something like this to make it work:
var settings = new JsonSerializerSettings();
settings.Converters.Add(new MyAbstractConverter());
client.SerializerSettings = settings;
DocumentClient doesn't have any SerializerSettings. So the question is, how can I tell the DocumentDB client that it must use a custom converter when deserializing the json data to my model?
Upvotes: 7
Views: 3467
Reputation: 31641
The latest CosmosDB SDK now includes support for JsonSerializerSettings
so you don't have to use JsonConverter anymore, you can use your own ContractResolver
. See related SO post.
Upvotes: 3
Reputation: 8119
You can add [JsonConverter(typeof(MyAbstractConverter))]
to your model class.
Here's an example model class with custom Json settings:
namespace DocumentDB.Samples.Twitter
{
using System;
using System.Collections.Generic;
using System.Linq;
using DocumentDB.Samples.Shared.Util;
using Newtonsoft;
using Newtonsoft.Json;
/// <summary>
/// Represents a user.
/// </summary>
public class User
{
[JsonProperty("id")]
public long UserId { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("screen_name")]
public string ScreenName { get; set; }
[JsonProperty("created_at")]
[JsonConverter(typeof(UnixDateTimeConverter))]
public DateTime CreatedAt { get; set; }
[JsonProperty("followers_count")]
public int FollowersCount { get; set; }
[JsonProperty("friends_count")]
public int FriendsCount { get; set; }
[JsonProperty("favourites_count")]
public int FavouritesCount { get; set; }
}
}
Upvotes: 5