Json.net 获取序列化对象以使用JsonProperty“;名称“;在接口内部定义

Json.net 获取序列化对象以使用JsonProperty“;名称“;在接口内部定义,json.net,Json.net,调用“JsonConvert.SerializeObject”时,我传入了一个实现接口的对象。它是定义JsonProperty属性以设置所需JSON对象属性名称的接口。但是,当我检查生成的JSON对象时,它使用的是实际的.NET属性名,而不是JsonPropertyAttribute值。这让我相信,它只是反映了接口的实现,以找到JsonProperty属性,而不是接口本身。我已经验证过,如果我将JsonProperty属性放在实现类上,那么一切都会按预期工作,但这不是期望的行为。有没有办法让JS

调用“JsonConvert.SerializeObject”时,我传入了一个实现接口的对象。它是定义JsonProperty属性以设置所需JSON对象属性名称的接口。但是,当我检查生成的JSON对象时,它使用的是实际的.NET属性名,而不是JsonPropertyAttribute值。这让我相信,它只是反映了接口的实现,以找到JsonProperty属性,而不是接口本身。我已经验证过,如果我将JsonProperty属性放在实现类上,那么一切都会按预期工作,但这不是期望的行为。有没有办法让JSON.NET获取接口上定义的JSONPropertyAttribute以及(或代替)接口

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());
    ...
    ...
}

更新:

上报道,这一点现在已由James在Json.NET代码库中修复,并正在发挥作用。 请参阅以及:

新特性—JsonObject和JsonProperty属性现在可以放置在接口上,并在序列化实现对象时使用


我遇到了相同的行为,即:对于实现接口的对象,忽略接口上的JsonProperty属性。如果上述方法有效,那就太好了。我猜没有人能修复(简单的解决方法)如果我有机会,我会下载源代码,看看是否有可能/修复过程中会涉及到什么/上传补丁链接不起作用。你能再次提供工作链接吗?