When upserting a new entity to a Cosmosdb Database I was getting
Could not create an instance of type MyNamespace.IUser. Type is an interface or abstract class and cannot be instantiated. Path 'User.Name', line 1, position 213.
When using the CosmosDb nuget package you can't specify a custom serialiser as you can with, say, Newtonsoft.
Instead you can create a constructor which takes a concrete implementation of the interface
[JsonConstructor]
public MyEntity(Status status, SomeOtherType value, User user) : base(user)
{
Status = status;
Value = value;
}
where base(user)
calls
public CosmosEntityBase(IUser user)
{
User = user;
}
public IUser User { get; set; }
This will be less straightforward if you have multiple implementations of the interface. You'll have to determine which one to instantiate.
However if the JsonConstructor
has the interface IUser
in its signature then
Could not create an instance of type MyNamespace.IUser. Type is an interface or abstract class and cannot be instantiated. Path 'User.Name', line 1, position 213.
will be returned so that is what you need to avoid.