gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:55:34 25 4
gpt4 key购买 nike

我有一个包含几个不同类的类,我将这些类中的信息发送给客户,但我不想将它们全部发送出去,所以有些是私有(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/

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