Получение SerializeObject для использования JsonProperty «name», определенного внутри интерфейса

#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. Ссылка не работает. Не могли бы вы помочь снова предоставить рабочую ссылку?