You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Json.NET在C#反序列化JSON时localAddress字段无法显示

问题分析与解决方案

你遇到的localAddress字段无法在DataGridView中显示的核心原因是实体类结构与JSON数据的层级不匹配,具体问题和修复步骤如下:

1. 核心问题:JSON层级与实体类的映射错误

先看你的JSON示例结构,localAddress是嵌套在network对象下的子字段:

{
  // ...其他根级字段
  "network": {
    "localAddress": "192.168.1.3:8298",
    "remoteAddress": "213.32.53.162:31337"
  }
}

但你的per类直接把localAddress定义成了根级属性,还注释掉了[JsonProperty("network")]特性——这就导致Json.NET无法识别network这个嵌套对象,自然读不到里面的localAddress值。

2. 修复实体类结构

你需要创建一个对应network对象的嵌套类,再在主类中正确映射这个层级:

// 新增嵌套类,对应JSON里的network对象
public class Network
{
    public string localAddress { get; set; }
    public string remoteAddress { get; set; }
}

public class per
{
    // 启用JsonProperty特性,绑定JSON中的network字段
    [JsonProperty("network")]
    public Network Network { get; set; }
    public string id { get; set; }
    public string name { get; set; }
}

3. 修正UI绑定与代码笔误

你的按钮点击事件里还有个小笔误:反序列化得到的变量是peer,但赋值时用了peers.Result,需要统一变量名。另外如果要在DataGridView中直接显示localAddress,可以通过两种方式处理:

  • 方式一:手动指定DataGridView列的数据源字段为Network.localAddress
  • 方式二:在per类中添加只读属性包装Network.localAddress,方便直接绑定

示例修正后的按钮事件代码:

private void button2_Click(object sender, EventArgs e)
{
    // 注意:如果你的JSON是单个对象而非数组,要去掉List<>
    var peers = JsonConvert.DeserializeObject<List<per>>(richTextBox1.Text);
    dataGridView2.DataSource = peers;
    
    // 手动指定列绑定(假设你已添加名为localAddressCol的列)
    dataGridView2.Columns["localAddressCol"].DataPropertyName = "Network.localAddress";
}

额外提示

如果你的JSON是单个对象而非数组,要把反序列化代码改成JsonConvert.DeserializeObject<per>(richTextBox1.Text),再用new List<per> { 反序列化后的对象 }作为数据源绑定到DataGridView。

内容的提问来源于stack exchange,提问作者Gy9vin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:00:25