为 DocumentDB 设置自定义 json 转换器

本文关键字:json 转换器 自定义 设置 DocumentDB | 更新日期: 2023-09-27 18:34:02

我正在使用类型化的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 数据反序列化为我的模型时它必须使用自定义转换器?

为 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帖子。