gpt4 book ai didi

c# - 根据用户确定在 Json.Net 中序列化的属性

转载 作者:行者123 更新时间:2023-12-02 12:21:21 24 4
gpt4 key购买 nike

我正在创建一个 ASP MVC Web API。我现在想根据执行请求的用户确定要序列化对象的哪些属性。 ApiController 知道用户。基于用户,我有一个函数返回一个字符串数组,其中包含用户在模型上有权访问的属性名称。

如何将用户传递给 ContractResolver,使其仅影响当前请求,而不会影响其他用户的同时请求?

最佳答案

您可以创建自定义ContractResolver

var json = JsonConvert.SerializeObject(
new UserClass() {ID=666, Name="john", SurName="doe"},
new JsonSerializerSettings() { ContractResolver = new CustomContractResolver(new[]{"ID", "SurName"}) }
);

在此示例中,输出 json 将仅包含 IDSurName(不包含 Name)

public class UserClass
{
public int ID { set; get; }
public string Name {set; get;}
public string SurName { set; get; }
}

public class CustomContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
IEnumerable<string> _allowedProps = null;

public CustomContractResolver(IEnumerable<string> allowedProps)
{
_allowedProps = allowedProps;
}

protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return _allowedProps.Select(p=>new JsonProperty() {
PropertyName = p,
PropertyType = type.GetProperty(p).PropertyType,
Readable = true,
Writable = true,
ValueProvider = base.CreateMemberValueProvider(type.GetMember(p).First())
} ).ToList();
}
}

关于c# - 根据用户确定在 Json.Net 中序列化的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22042306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com