Json.net 获取序列化对象以使用JsonProperty“;名称“;在接口内部定义
调用“JsonConvert.SerializeObject”时,我传入了一个实现接口的对象。它是定义JsonProperty属性以设置所需JSON对象属性名称的接口。但是,当我检查生成的JSON对象时,它使用的是实际的.NET属性名,而不是JsonPropertyAttribute值。这让我相信,它只是反映了接口的实现,以找到JsonProperty属性,而不是接口本身。我已经验证过,如果我将JsonProperty属性放在实现类上,那么一切都会按预期工作,但这不是期望的行为。有没有办法让JSON.NET获取接口上定义的JSONPropertyAttribute以及(或代替)接口Json.net 获取序列化对象以使用JsonProperty“;名称“;在接口内部定义,json.net,Json.net,调用“JsonConvert.SerializeObject”时,我传入了一个实现接口的对象。它是定义JsonProperty属性以设置所需JSON对象属性名称的接口。但是,当我检查生成的JSON对象时,它使用的是实际的.NET属性名,而不是JsonPropertyAttribute值。这让我相信,它只是反映了接口的实现,以找到JsonProperty属性,而不是接口本身。我已经验证过,如果我将JsonProperty属性放在实现类上,那么一切都会按预期工作,但这不是期望的行为。有没有办法让JS
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属性。如果上述方法有效,那就太好了。我猜没有人能修复(简单的解决方法)如果我有机会,我会下载源代码,看看是否有可能/修复过程中会涉及到什么/上传补丁链接不起作用。你能再次提供工作链接吗?