Json.NET - 如何在不访问类的情况下从序列化中排除属性



我正在尝试使用 Json.NET 序列化一个类。这是我目前所做的。

public class AClass
{
    // I don't have access to BClass
    public BClass b;
}
AClass a = new AClass();
JsonConvert.SerializeObject(a);

我无法访问BClass.我想序列化我的AClass但我不想序列化BClass的所有属性,只序列化其中的一部分。

我该怎么做?

您可以使用

自定义ContractResolver,此库将使其更容易构建。

var propertiesContractResolver = new PropertiesContractResolver();
propertiesContractResolver.ExcludeProperties.Add("BClass.Id");
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = propertiesContractResolver;
JsonConvert.SerializeObject(a, serializerSettings);

我想到了几个想法,你可以根据你需要为多少个不同的类执行此操作以及你需要算法的性能来选择它们:

可能最快的方法是使用 Json.net 的自定义转换器或合约解析器并构建一个适合您需求的转换器或合约解析器,即忽略您不想包含的属性。

另一种方法是将此类映射到另一个类似定义的类,该类不包含您不希望包含的属性,然后序列化该类。可以使用自动映射在类似定义的类之间快速映射。

最后,您可以创建一个ExpandoObject(甚至Dictionary<string, object>(并将要包含的属性添加到 Expando 或字典中(您可以手动或通过反射等复制这些属性/键值对(,然后序列化该对象/字典。

相关内容

  • 没有找到相关文章

最新更新