SavingPot 2022-08-10 13:52 采纳率: 50%
浏览 68
已结题

Newtonsoft.Json序列化怎么忽略只读

Newtonsoft.Json序列化怎么忽略只读?

以下是 class 代码

public string a { get; }
public string b { get; set; }
public string c;

以下是方法代码

        jss ??= new JsonSerializerSettings()
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore, //忽略循环引用
            NullValueHandling = NullValueHandling.Ignore,
            DefaultValueHandling = DefaultValueHandling.Ignore,
        };
        string str = JsonConvert.SerializeObject(obj, jss); 
        return str;

我在序列化的时候发现 a 也被序列化了, 但是我是要把这个用于游戏存档, 要越小越好 (不压缩string)
我只想让 b, c 被序列化应该怎么弄
要求是不能修改 abc 的类, 所以没法加 [JsonIgnore] 之类的

  • 写回答

1条回答 默认 最新

  • wanghui0380 2022-08-10 18:02
    关注

    这个功能,目前在net自己的System.Text.Json是已经默认支持的,jsonoption里就有控制

    如果是Newton的库,我们需要自己实现他

    我写了一个demo

    sonSerializerSettings settings = new JsonSerializerSettings
    {
        ContractResolver = new WritablePropertiesOnlyResolver()
    };
    
    var obj = new test() { b = "b", c = "c" };
    var str = JsonConvert.SerializeObject(obj, settings);
    
    Console.ReadKey();
    //这个就是只提取可写属性扩展
    class WritablePropertiesOnlyResolver : DefaultContractResolver
    {
        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            IList<JsonProperty> props = base.CreateProperties(type, memberSerialization);
            return props.Where(p => p.Writable).ToList();
        }
    }
    class test
    {
        public string a { get; }
        public string b{ get; set; }
        public string c;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 修改了问题 8月10日
  • 修改了问题 8月10日
  • 展开全部

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分