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

.Net项目P1向Java项目P2传递JObject转JsonNode数据异常问题

问题场景

我维护两个项目:P1(.NET)和P2(Java)。外部POST请求先发送到P1,P1将请求反序列化后再转发给P2。

P1的C#请求实体类:

public class Request
{
    [JsonProperty("id")]
    public string Id { get; set; }
    [JsonProperty("type")]
    public string Type{ get; set; }
    [JsonProperty("data")]
    public JObject Data { get; set; }
}

P2的Java请求实体类:

public class Request{
    private String id;
    private String type;
    private JsonNode data;
}

问题现象

  • P1接收并反序列化后,请求内容完全符合预期:
    id -> 3
    type -> "type1"
    data -> {{name: "myRequest", topic: "myTopic"}}
    
  • 但转发到P2后,data字段的内容异常,字符串值变成了空数组:
    id -> 3
    type -> "type1"
    data -> {{name: [], topic: []}}
    

原始JSON对比

  • P1收到的原始JSON:
{
   "id": "1234",
   "type": "type1",
   "data": 
   {
      "name": "010018",
      "topic": "EGYT"
   }
}
  • P1转发给P2的JSON:
{
   "id": "1234",
   "type": "type1",
   "data": 
   {
     "name": [],
     "topic": []
   }
}

因为data的结构会随请求类型变化,必须在P2中用JsonNode保留原始JSON结构来后续解析,所以需要修复转发时的序列化问题。

解决方案

问题根源是P1中使用了不兼容的JSON序列化方式处理JObject类型字段。JObject是Newtonsoft.Json(Json.NET)的专属类型,如果用System.Text.Json序列化会导致结构异常,将字符串值错误序列化为空数组。

方案一:改用Newtonsoft.Json序列化请求对象

在P1转发请求时,使用Newtonsoft.Json来序列化Request对象,而非System.Text.Json:

// 引用Newtonsoft.Json包
using Newtonsoft.Json;

// 序列化请求对象
var serializedRequest = JsonConvert.SerializeObject(request);
// 创建请求内容
var content = new StringContent(serializedRequest, Encoding.UTF8, "application/json");
// 发送到P2的请求逻辑
var httpClient = new HttpClient();
await httpClient.PostAsync("P2的接口地址", content);

方案二:将Data字段改为字符串类型(保留原始JSON)

如果不需要在P1中操作data的内容,可以直接将P1的Request类中Data字段改为string类型,直接保留原始JSON字符串,避免序列化转换的问题:

public class Request
{
    [JsonProperty("id")]
    public string Id { get; set; }
    [JsonProperty("type")]
    public string Type{ get; set; }
    [JsonProperty("data")]
    public string Data { get; set; }
}

这种方式下,P1反序列化时会直接把data对应的JSON字符串保留,转发时原样输出,P2的JsonNode可以正常解析该字符串为JSON对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:50:23