2014-12-11 2 views
4

저는 형식화 된 DocumentQuery를 사용하여 Azure DocumentDb 컬렉션에서 문서를 읽습니다.DocumentDb 용 사용자 정의 json 변환기 설정

유형 AbstractObject의 인스턴스를 만들 수 없습니다 : 나는 내가 neccesarry 사용자 정의 JSON 변환을 설정할 수있는 방법을 방법을 찾아야하지 않기 때문에

from f in client.CreateDocumentQuery<MyModel>(Collection.SelfLink) select f 

는,이 exeption가 발생합니다. 유형이 인 인터페이스 또는 추상 클래스이며 인스턴스화 할 수 없습니다.

는 일반적으로 당신은 그것이 작동되도록하려면 같은 것을 할 :

var settings = new JsonSerializerSettings(); 
settings.Converters.Add(new MyAbstractConverter()); 
client.SerializerSettings = settings; 

DocumentClient 어떤 SerializerSettings이 없습니다. 그래서 문제는, json 데이터를 모델로 역 직렬화 할 때 사용자 지정 변환기를 사용해야한다는 것을 DocumentDB 클라이언트에 알리는 방법은 무엇입니까?

+3

추상 모델 클래스에'[JsonConverter (typeA (MyAbstractConverter)]] 속성을 추가해 보았습니까? –

+0

애트리뷰트 작동 :) 다른 예외가 발생합니다. 그러나 이것은 추상적 인 인스턴스가 아닙니다. 고맙습니다! – dixus

답변

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; } 
    } 
} 
+0

UnixDateTimeConverter의 참조는 무엇입니까? –

+1

죄송합니다. 이전에 링크를 제공 했어야합니다. https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/code-samples/Shared/Util/UnixDateTimeConverter.cs –

+0

@AndrewLiu 그 속성은 무엇입니까? 실제로, DocumentDb의 직렬화 된 파일에 추가 할 수 있습니까? – m1nkeh

0

최신 CosmosDB SDK 지금은 그래서 당신은 당신이 ContractResolver 자신을 사용할 수 있습니다, 더 이상 JsonConverter을 사용할 필요가 없습니다 JsonSerializerSettings에 대한 지원이 포함되어 있습니다. See related SO post.