c# - JSON.Net:强制序列化所有私有(private)字段和子类中的所有字段

标签 c# json.net

我有一个包含几个不同类的类,我将这些类中的信息发送给客户,但我不想将它们全部发送出去,所以有些是私有(private)的,有些有 [JsonObject(MemberSerialization.OptIn )] 标志等

但是,现在我想在需要关闭服务器时以及每 12 小时(我不想使用数据库)对所有这些对象进行备份,所以我想做的(如果可能的话)是强制 JSON.Net Serializer 转换对象和属于该对象的所有对象。

例如:

class Foo
{
  public int Number;
  private string name;
  private PrivateObject po = new PrivateObject();

  public string ToJSON()
  { /* Serialize my public field, my property and the object PrivateObject */ }
}

我试过这段代码(即使它已经过时)但它没有序列化与我的对象相关的对象:

Newtonsoft.Json.JsonSerializerSettings jss = new Newtonsoft.Json.JsonSerializerSettings();

Newtonsoft.Json.Serialization.DefaultContractResolver dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver();
dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic;
jss.ContractResolver = dcr;

return Newtonsoft.Json.JsonConvert.SerializeObject(this, jss);

最佳答案

这应该有效:

var settings = new JsonSerializerSettings() { ContractResolver = new MyContractResolver() };
var json = JsonConvert.SerializeObject(obj, settings);

public class MyContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                        .Select(p => base.CreateProperty(p, memberSerialization))
                    .Union(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                               .Select(f => base.CreateProperty(f, memberSerialization)))
                    .ToList();
        props.ForEach(p => { p.Writable = true; p.Readable = true; });
        return props;
    }
}

关于c# - JSON.Net:强制序列化所有私有(private)字段和子类中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106986/

相关文章:

c# - 平台特定代码中的 .NET MAUI 依赖注入(inject)

c# - 排程优化

c# - 如何使用列表框将文本文件字符串发送到文本框?

c# - Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic> 在 c# 下带有 UTF 代码 U0027

c# - 从 Vb 调用时,COM-Interop 程序集未找到 native (.Net) 依赖项

c# - Json GET请求从数组<>对象变化

c# - OpenTracing 不使用 Serilog 发送日志

javascript - WCF 上的 CORS - 当请求来自客户端计算机时,为什么要指定 Web 服务器?

c# - 阅读 WebApi 的 IDataReader 的最佳方式

c# - 你能有一个包含破折号的属性名称吗