当调用“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());
...
...
}
报告
答案 0 :(得分:3)
这已经在James的Json.NET代码库中得到修复,并且正在运行。 请参阅codeplex issue report以及Json.NET 4.0 Release 3 release notes:
新功能 - JsonObject和JsonProperty属性现在可以放在接口上,并在序列化实现对象时使用。