我正在使用类型化的DocumentQuery来读取Azure DocumentDb集合中的文档。
from f in client.CreateDocumentQuery<MyModel>(Collection.SelfLink) select f
因为我找不到如何设置neccesarry自定义json转换器的方法,所以它抛出了这个例子:
无法创建AbstractObject类型的实例。类型是 接口或抽象类,无法实例化。
通常你会做这样的事情来使其发挥作用:
var settings = new JsonSerializerSettings();
settings.Converters.Add(new MyAbstractConverter());
client.SerializerSettings = settings;
DocumentClient没有任何SerializerSettings。所以问题是,如何在将json数据反序列化到我的模型时告诉DocumentDB客户端它必须使用自定义转换器?
答案 0 :(得分:4)
您可以将[JsonConverter(typeof(MyAbstractConverter))]
添加到模型类中。
这是一个带有自定义Json设置的示例模型类:
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; }
}
}
答案 1 :(得分:2)
最新的CosmosDB SDK现在包含对JsonSerializerSettings
的支持,因此您不必再使用JsonConverter,您可以使用自己的ContractResolver
。 See related SO post。