首页 > 解决方案 > 用json.net c#反序列化json不输出所有字段

问题描述

有没有这样的json格式的答案

{
    "id": "161e6e624c78acfd7fd783844bc0adfa38c5135feb9170c9e8a05094ac41f11a1d87552aae3cd6544cecf7f3b8162edee7c01f5785c14f5ed11e1eee14e28619",
    "name": "Geth/genom.minerpool.net/v1.8.0-unstable-8ec3861d/linux-amd64/go1.9.2",
    "caps": [
      "eth/62",
      "eth/63"
    ],
    "network": {
      "localAddress": "192.168.1.3:8298",
      "remoteAddress": "213.32.53.162:31337"
    },
    "protocols": {
      "eth": {
        "version": 63,
        "difficulty": 121712103143555595,
        "head": "0x7686acff7fa7560013bb6c7997c42d7f6adb0514277edbb7418e362b8e32bca2"
      }
    }
  },

对请求进行脱盐的程序的代码。

public class per 
{
    //[JsonProperty("network")]
    public string localAddress { get; set; }
    public string id { get; set; }
    public string name { get; set; }
}

private void button2_Click(object sender, EventArgs e)
{
    var peer = JsonConvert.DeserializeObject<List<per>>(richTextBox1.Text.ToString());
    dataGridView2.DataSource = peers.Result;
}

问题是它没有在localAddres的datagridview中放一个空白字段。我究竟做错了什么?

标签: c#jsonjson.netdeserialization

解决方案


JSON 被反序列化为一个集合,而它是一个对象。

使用另一个答案中定义的类,事件处理程序应按如下方式完成。

private async void button2_Click(object sender, EventArgs e) {
    var enbode = new Nethereum.Geth.Web3Geth("http://127.0.0.1:8545");
    var peers = await enbode.Admin.Peers.SendRequestAsync();
    richTextBox1.Text = peers.ToString();
    var peer = JsonConvert.DeserializeObject<Example>(richTextBox1.Text);
    dataGridView2.DataSource = new [] { peer };
}

推荐阅读