4

使用反射,我可以根据成员是否是继承、声明、公共、私有等来过滤成员。在使用 JSon.NET 序列化对象时,有什么方法可以进行相同类型的过滤吗?

我的代码目前是:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public void addRequestParameters<T>(string key, T SerializableRequestParameters)
{
    //Serialize the object
    string json = JsonConvert.SerializeObject(SerializableRequestParameters, new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All,
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
    });
    //Add it to an existing request (unrelated to this question)
    ((JObject)JSONRequest).Add(key, JToken.Parse(json));
}
4

1 回答 1

3

我认为您可以使用自定义ContractResolver来实现您的目标。

IContractResolver 接口提供了一种方法来自定义 JsonSerializer 如何将 .NET 对象序列化和反序列化为 JSON。

实现 IContractResolver 接口,然后将实例分配给 JsonSerializer 可以让您控制对象是序列化为 JSON 对象还是 JSON 数组、应该序列化哪些对象成员、如何序列化它们以及调用什么。

无论如何,我在这里发现了同样的问题:Using JSON.net, how do I prevent serializing properties of a derived class, when used in a base class context?

于 2012-06-27T17:49:29.770 回答