我有一个POCO类别,如下所示。那是IFooInterface?它是一个接口,每个要添加到Cosmosdb的对象都需要从该接口继承。 (回到这个事实的主要原因是我们拥有不同类型的结果)
[CosmosCollection("foo")]
public class FooClass
{
[CosmosPartitionKey]
[JsonProperty("foo")] public string Foo{ get; set; }
[JsonProperty("id")] public string Id{ get; set; }
[JsonProperty("reportSet")] public IFooInterface FooResult { get; set; }
}
public interface IFooInterface {}
,我有一个回购人,他可以帮助您获得这些结果。我的问题是,在下面的方法中,我遇到了错误。这是回购中的方法
public async Task<IEnumerable<objectClass>> GetAsync(GetObjects query)
{
try
{
var testOne= await _reportStore
.Query(new FeedOptions { PartitionKey = new PartitionKey(query.foo) })
.ToListAsync();
return result;
}
catch (Exception e)
{
throw e;
}
}
错误是
Message =“无法创建IFooInterface类型的实例。 类型是接口或抽象类,不能实例化。” 在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader,JsonObjectContract objectContract, JsonProperty containerMember,JsonProperty containerProperty,字符串ID,布尔值和createdFromNonDefaultCreator)\ r \ n 在...
我想知道如何解决这个问题?有人有建议吗?
答案 0 :(得分:1)
'解串器无法解析抽象类的接口。但是,一种解决方案是将$type
属性添加到您的FooResult
中,并将其用于反序列化。
[JsonProperty(PropertyName = "reportSet", TypeNameHandling = TypeNameHandling.Objects)]
public IFooInterface FooResult { get; set; }
您的FooResult的Json对象现在必须包含$type
属性,如
{ "$type" : "someNamespace.FooInterfaceImplementation, assemblyOfTheClass" }