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

如何从oneM2M API的JSON响应中获取con节点下的dataFrame数据?

解决oneM2M API JSON响应中获取dataFrame为空的问题

你遇到的核心问题是没处理好JSON的嵌套层级,而且con字段本身是一个JSON格式的字符串,不是直接的对象,所以直接访问bin.dataFrame肯定拿不到值。咱们一步步来修正:

问题分析

先拆解你的JSON结构:

{ 
  "m2m:cin": { 
    // ...其他字段
    "con": "{\"userid\":\"user1\",\"payloads_ul\":{\"id\":1526738533510,...\"dataFrame\":\"QUxJVkUqQkFUMzUw\"}}" 
  } 
}
  • 最外层是m2m:cin对象,你得先定位到它;
  • con是一个字符串,里面才包含payloads_ul和dataFrame,必须把这个字符串再反序列化一次才能访问内部字段。

修正后的动态类型代码

如果你想继续用dynamic快速实现,修改读取响应的部分即可:

using (var stream = resp.GetResponseStream())
{
    var reader = new StreamReader(stream, encoding);
    var responseString = reader.ReadToEnd();
    
    // 1. 解析最外层JSON,获取m2m:cin对象
    dynamic root = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);
    dynamic cinObject = root["m2m:cin"];
    
    // 2. 取出con的JSON字符串,二次反序列化
    string conJsonContent = cinObject.con.ToString();
    dynamic conData = Newtonsoft.Json.JsonConvert.DeserializeObject(conJsonContent);
    
    // 3. 现在可以正确拿到dataFrame了
    string dataFrameValue = conData.payloads_ul.dataFrame.ToString();
    byte[] data = Convert.FromBase64String(dataFrameValue);
}

更安全的实体类方案(推荐)

动态类型虽然方便,但编译时没有类型检查,容易出错。推荐定义对应实体类来解析,代码更健壮:

首先创建匹配JSON结构的实体类:

using Newtonsoft.Json;

// 最外层响应类
public class OneM2MResponse
{
    [JsonProperty("m2m:cin")]
    public CinEntry Cin { get; set; }
}

// m2m:cin节点类
public class CinEntry
{
    public string con { get; set; }
    // 其他需要的字段(比如ty、ri等)可以在这里补充
}

// con字段的内容类
public class ConContent
{
    public string userid { get; set; }
    [JsonProperty("payloads_ul")]
    public PayloadsUl Payloads { get; set; }
}

// payloads_ul节点类
public class PayloadsUl
{
    [JsonProperty("dataFrame")]
    public string DataFrame { get; set; }
    // 其他需要的字段可以补充
}

然后用实体类解析响应:

using (var stream = resp.GetResponseStream())
{
    var reader = new StreamReader(stream, encoding);
    var responseString = reader.ReadToEnd();
    
    // 解析最外层响应
    var apiResponse = JsonConvert.DeserializeObject<OneM2MResponse>(responseString);
    // 解析con字段的JSON字符串
    var conContent = JsonConvert.DeserializeObject<ConContent>(apiResponse.Cin.con);
    
    // 获取dataFrame
    string dataFrame = conContent.Payloads.DataFrame;
    byte[] data = Convert.FromBase64String(dataFrame);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:36