怎样把多层的json反序列化成一层的对象

中文命名法 2020-12-09 07:58:14
{
"status" : "success",
"data" : {
"block_no" : 0,
"time" : 1231006505,
"confirmations" : 660591
}
}
譬如说我要把data里的time转成对象的时候和data平级,而不是上下级,这要怎么写
class 查询
{
[JsonProperty("status")]
public string 状态 { get; set; }
[JsonProperty("time")]
public 时间 { get; set; }
}
这样不对吧?
...全文
4207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly4free 2020-12-10
  • 打赏
  • 举报
回复
只要你能取到 key:value 对,就可以自己 序列化与反序列化。
正怒月神 2020-12-10
  • 打赏
  • 举报
回复
我其实都不认为是个问题。
我们走正规的解决方案。
你把这个json,转成对象。
然后通过lambda或者新的赋值操作,取出data中的time,生成新的对象。

static void Main(string[] args)
{
Model<Data> model = JsonConvert.DeserializeObject<Model<Data>>(json);
var q = new
{
State = model.state,
time = model.data.time,
Data = model.data
};

Console.ReadLine();
}

public class Model<T>
{
public int state { get; set; }
public T data { get; set; }
}

public class Data
{
public string block_no { get; set; }
public string time { get; set; }
}




如果你一定要一步到位。
那么自己通过JObject去操作。具体百度。
ziqi0716 2020-12-10
  • 打赏
  • 举报
回复

    public class Query
    {
        [JsonProperty("status")]
        public string Status { get; set; } 
        [JsonProperty("data")]
        public Data Data { private get; set; }
        [JsonIgnore]
        public int block_no => Data.block_no;

        [JsonIgnore]
        public long time => Data.time;

        [JsonIgnore]
        public long confirmations => Data.confirmations;  
    }
    public class Data
    {
        public int block_no { get; set; }
        public long time { get; set; }
        public long confirmations { get; set; }
    }

wanghui0380 2020-12-10
  • 打赏
  • 举报
回复
没有偷懒的途径,所以需要手动重新map一下 单纯说建个类,非要和类对应。json.net和syste.text.json都提供自定义过程。 但是,还是但是,你有实现那个自定义过程的时间,早就重新map了10,20个json文本了
张天星 2020-12-10
  • 打赏
  • 举报
回复
一个类我是搞不定的,但是多级多个类,在第一级进行使用,这样是没问题的。


        public class Rootobject
        {
            public string status { get; set; }
            public Data data { get; set; }
            public int time => data.time;
            public int block_no {
            get{
            if(_block_no == null){
                _block_no  = data.block_no;
           }
            return _block_no;
            }
set{_block_no  = value;}
            }
            private int? _block_no;
        }

        public class Data
        {
            public int block_no { get; set; }
            public int time { get; set; }
            public int confirmations { get; set; }
        }
enaking 2020-12-10
  • 打赏
  • 举报
回复
这种相当于嵌入的{},你自己写一下业务逻辑就行了,就是递归一下。
八爻老骥 2020-12-09
  • 打赏
  • 举报
回复
引用 2 楼 中文命名方式倡导者 的回复:
[quote=引用 1 楼 icoolno1 的回复:][quote=引用 楼主 中文命名方式倡导者 的回复:]
{
"status" : "success",
"data" : {
"block_no" : 0,
"time" : 1231006505,
"confirmations" : 660591
}
}
譬如说我要把data里的time转成对象的时候和data平级,而不是上下级,这要怎么写
class 查询
{
[JsonProperty("status")]
public string 状态 { get; set; }
[JsonProperty("time")]
public 时间 { get; set; }
}
这样不对吧?


就这样写。[/quote]这样不行,没获取到json中第二层data里的键值。[/quote]

那是另外一个问题,需要定义一个类型对应data属性。
中文命名法 2020-12-09
  • 打赏
  • 举报
回复
引用 1 楼 icoolno1 的回复:
[quote=引用 楼主 中文命名方式倡导者 的回复:]
{
  "status" : "success",
  "data" : {
    "block_no" : 0,
    "time" : 1231006505,
    "confirmations" : 660591
 }
}
譬如说我要把data里的time转成对象的时候和data平级,而不是上下级,这要怎么写
class 查询
{
    [JsonProperty("status")]
    public string 状态 { get; set; }
    [JsonProperty("time")]
    public 时间 { get; set; }
}
这样不对吧?
就这样写。[/quote]这样不行,没获取到json中第二层data里的键值。
八爻老骥 2020-12-09
  • 打赏
  • 举报
回复
引用 楼主 中文命名方式倡导者 的回复:
{
"status" : "success",
"data" : {
"block_no" : 0,
"time" : 1231006505,
"confirmations" : 660591
}
}
譬如说我要把data里的time转成对象的时候和data平级,而不是上下级,这要怎么写
class 查询
{
[JsonProperty("status")]
public string 状态 { get; set; }
[JsonProperty("time")]
public 时间 { get; set; }
}
这样不对吧?


就这样写。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧