在 Json.NET 中,如何在不受我控制的类(例如实体框架类)上指定元数据,例如要序列化哪些属性?
我可以发誓我已经读过一种方法,但我在文档中再也找不到它了。
如果我只是失明,请提前道歉。
在 Json.NET 中,如何在不受我控制的类(例如实体框架类)上指定元数据,例如要序列化哪些属性?
我可以发誓我已经读过一种方法,但我在文档中再也找不到它了。
如果我只是失明,请提前道歉。
迟到的答复,但迟到总比没有好。
您可以使用 AutoMapper、ValueInjector 等将不受您控制的类映射到您创建/控制的类。然后您可以自由应用任何必要的属性。
编辑:使用IContractResolver的 JSON.NET 文档中的解决方案
public class DynamicContractResolver : DefaultContractResolver
{
private readonly char _startingWithChar;
public DynamicContractResolver(char startingWithChar)
{
_startingWithChar = startingWithChar;
}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
// only serializer properties that start with the specified character
properties =
properties.Where(p => p.PropertyName.StartsWith(_startingWithChar.ToString())).ToList();
return properties;
}
}
public class Book
{
public string BookName { get; set; }
public decimal BookPrice { get; set; }
public string AuthorName { get; set; }
public int AuthorAge { get; set; }
public string AuthorCountry { get; set; }
}
IContractResolver 示例
Book book = new Book
{
BookName = "The Gathering Storm",
BookPrice = 16.19m,
AuthorName = "Brandon Sanderson",
AuthorAge = 34,
AuthorCountry = "United States of America"
};
string startingWithA = JsonConvert.SerializeObject(book, Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('A') });
// {
// "AuthorName": "Brandon Sanderson",
// "AuthorAge": 34,
// "AuthorCountry": "United States of America"
// }
string startingWithB = JsonConvert.SerializeObject(book, Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('B') });
// {
// "BookName": "The Gathering Storm",
// "BookPrice": 16.19
// }