#json.net
#json.net
Вопрос:
При вызове «JsonConvert.SerializeObject» я передаю объект, который реализует интерфейс. Именно интерфейс определяет атрибуты JsonProperty для установки желаемого имени свойства объекта JSON. Однако, когда я исследую созданный объект JSON, он использует фактический.Имя СЕТЕВОГО свойства, а не значение атрибута JsonProperty. Это наводит меня на мысль, что поиск атрибутов JsonProperty отражается только на реализации интерфейса, а не на самом интерфейсе. Я проверил, что если я помещаю атрибуты JsonProperty в реализующий класс, то все работает как ожидалось, но это не желаемое поведение. Есть ли какой-либо способ сделать JSON.NET выберите атрибуты JsonPropertyAttributes, определенные в интерфейсе, а также (или вместо) в интерфейсе.
public interface ISpecifyDataPageToGet
{
[JsonProperty("offset")]
int PageNumber { get; }
[JsonProperty("limit")]
int PageSize { get; }
}
public class PageInfo : ISpecifyDataPageToGet
{
public PageInfo(int pageNumber, int pageSize)
{
this.PageNumber = pageNumber;
this.PageSize = pageSize;
}
// I don't want to have to define JsonProperty attribute here
public int PageNumber { get; private set; }
// Or here
public int PageSize { get; private set; }
}
public void MakeCall(ISpecifyDataPageToGet requestMessage)
{
// I'm passing instance of interface in here, but it still only picks up
// attributes defined on class implementing interface.
JsonConvert.SerializeObject(requestMessage, Formatting.None, new JsonSerializerSettings());
...
...
}
ОБНОВЛЕНИЕ: Сообщается на сайте проекта Codeplex
Комментарии:
1. Я столкнулся с тем же поведением, а именно: атрибуты JsonProperty в интерфейсе игнорируются для объекта, который реализует интерфейс. Было бы неплохо, если бы вышеуказанное сработало.
2. Я предполагаю, что ни у кого еще нет исправления (простой выход) Если у меня будет шанс, я загружу исходный код и посмотрю, возможно ли это / что потребуется для его исправления / загрузки патча
Ответ №1:
Теперь это исправлено в Json.ЧИСТАЯ кодовая база Джеймсом и работает. Смотрите отчет о проблеме codeplex, а также Json.NET Примечания к выпуску версии 4.0 3:
Новая функция — атрибуты JSONObject и JsonProperty теперь можно размещать в интерфейсе и использовать при сериализации реализующих объектов.
Комментарии:
1. Ссылка не работает. Не могли бы вы помочь снова предоставить рабочую ссылку?