У меня есть некоторые объекты:C# Json.Deserialize с помощью объекта с детьми класса с интерфейсами
public class MyObject
{
public MyField Field { get; set; }
}
public class MyField
{
[JsonProperty]
public Entity MyEntity { get; set; }
public IEntity IMyEntity { get; set; }
}
public interface IEntity
{
string MyStr { get; }
}
public class Entity : IEntity
{
}
Тогда я пытаюсь сделать что-то вроде
JsonConvert.DeserializeObject<MyObject>(myObjStr);
Который выдает ошибку, аналогичную
Не удалось создать экземпляр типа MyObject ... Тип - это интерфейс или абстрактный класс и не может быть создан. Path 'MyField.IMyEntity.MyInt'
Я не могу изменить поле или сущность, как это находится в кодовой базе другой группы. Класс MyObject принадлежит мне. Есть ли способ десериализовать этот объект? Я пробовал несколько вещей с помощью JsonSerializerSettings здесь JSON.NET - how to deserialize collection of interface-instances?, но безрезультатно.
Для того, чтобы написать еще проще, вы можете переопределить [ ' CanWrite'] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonConverter_CanWrite.htm) и вернуть 'false'. – dbc
@dbc Правильно! Хотя 'WriteJson' на самом деле является абстрактным методом, поэтому нам пришлось бы заменить реализацию с помощью« NotImplementedException »(или аналогичного). Если 'JsonTypeMapper' сам был предназначен для переопределения (или абстрактного), я бы определенно придерживался' CanWrite', но, как вопрос предпочтения, я стараюсь избегать «NotImplementedException». – Rob