我正在使用类型化的DocumentQuery从Azure DocumentDb的集合中读取文档。
from f in client.CreateDocumentQuery<MyModel>(Collection.SelfLink) select f
因为我找不到如何设置必要的自定义 json 转换器的方法,所以它抛出了这个解释:
无法创建抽象对象类型的实例。类型是 接口或抽象类,无法实例化。
通常你做这样的事情来让它工作:
var settings = new JsonSerializerSettings();
settings.Converters.Add(new MyAbstractConverter());
client.SerializerSettings = settings;
文档客户端没有任何序列化程序设置。所以问题是,我如何告诉 DocumentDB 客户端在将 json 数据反序列化为我的模型时它必须使用自定义转换器?
您可以将[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; }
}
}
最新的CosmosDB SDK现在包括对JsonSerializerSettings
的支持,因此您不必再使用JsonConverter,您可以使用自己的ContractResolver
。请参阅相关的SO帖子。