多级嵌套json反序列化为实体对象 c#

使用c#代码对json文件中的值进行修改,修改后再序列化为json文件

将多级嵌套的json文件,转化为类对象,反序列化

目录

1. 转化为类对象

2. json文件反序列化

3. 获取并修改属性值

4. 序列化


1. 转化为类对象

json文件如下:

json文件放置在我本地文件夹:D:\2021\test.json

(1) 在vs中新建一个类

点击自己的project->右键-》Add-》New Item-》ProjectName.cs

(2) 打开要转化的json文件,全选复制,ctrl+A,ctrl+C

(3) 打开新建的类ProjectName.cs,点击vs工具栏编辑(Edit),找到选择性粘贴(paste special) ,paste json as classes

(4) 粘贴完后发现已经自动转化

2. json文件反序列化

代码:

var jsonString = File.ReadAllText(@"D:\2021\test.json");
var rootobject = JsonConvert.DeserializeObject<Rootobject>(jsonString);

使用DeserializeObject()方法

可参考网站:

JsonConvert.DeserializeObject Method (newtonsoft.com)

Deserialize an Object (newtonsoft.com)

3. 获取并修改属性值

从ProjectName.cs中可以看出,获取属性值会比较复杂

因为本例中给的json文件中Rule[]为一个数组,所以使用了foreach遍历

private static string UpdateRules(string ruleName, bool isEnbaled, string ruleType, string bType, string[] prefixMatch, int createDays, int updateDays, int deleteDays)
        {
            var jsonString = File.ReadAllText(@"D:\2021\test.json");
            var rootobject = JsonConvert.DeserializeObject<Rootobject>(jsonString);
            
            string id = rootobject.id;
            string name = rootobject.name;
            string type = rootobject.type;

            Properties properties = rootobject.properties;
            Policy policy = properties.policy;

            Rule[] rules = policy.rules;
            foreach (Rule rule in rules)
            {
                rule.name = ruleName;
                rule.enabled = isEnbaled;
                rule.type = ruleType;
                Definition definition = rule.definition;
                Filters filters = definition.filters;
                Actions actions = definition.actions;

                filters.bTypes = bType;
                filters.prefixMatch = prefixMatch;
                Base _base = actions._base;
                Create create = _base.create;
                Update update = _base.update;
                Delete delete = _base.delete;

                create.days = createDays;
                update.days = updateDays;
                delete.days = deleteDays;
            }

            string json = JsonConvert.SerializeObject(rootobject, Formatting.Indented);
            Console.WriteLine(json);
            return json;
        }

4. 序列化

string json = JsonConvert.SerializeObject(rootobject, Formatting.Indented);

参考网站:

JsonConvert.SerializeObject Method (newtonsoft.com)

至此便完成了使用c#对json文件的修改。

该project完整代码见:wanding-sai/UpdateJsonFile-viaC-: DeserializeJson and Update it via code (github.com)

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值