При вызове «JsonConvert.SerializeObject» я передаю объект, реализующий интерфейс. Это интерфейс, который определяет атрибуты JsonProperty для установки желаемого имени свойства объекта JSON. Однако, когда я проверяю созданный объект JSON, он использует фактическое имя свойства .NET, а не значение JsonPropertyAttribute. Это заставляет меня поверить, что это отражает только реализацию интерфейса для поиска атрибутов 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.