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

设备输出的类JSON非标准格式识别及C#转JSON/对象方法咨询

非标准对象字符串的格式识别与C#处理方案

一、格式类型说明

你拿到的是Java对象的toString()输出格式,这是Java中对象默认或自定义的字符串表示形式,核心特征:

  • 用类名{键=值, 键=值...}结构表示对象
  • 嵌套对象遵循同样的类名{...}格式
  • 数组用[元素1, 元素2...]包裹
  • 与JSON的核心区别:键和字符串值无双引号,键值分隔符为=而非:

二、转换为标准JSON的方法

通过字符串替换将其转为合法JSON,核心步骤:

  1. 将类名{替换为{"类名": {,比如Body{→{"Body": {
  2. 将键=替换为"键":,比如id=0→"id":0
  3. 将纯大写+下划线的字符串值(如NOT_TRACKED、UNKNOWN)用双引号包裹
  4. 确保布尔值(如true)符合JSON小写规范
  5. 修正嵌套结构的括号匹配,形成标准JSON结构

示例C#转换函数:

using System.Text.RegularExpressions;

public static string ToJson(string rawInput)
{
    string json = rawInput;
    // 替换类名开头的{为JSON对象格式
    json = Regex.Replace(json, @"(\w+)\{", @"{""$1"": {");
    // 替换键值分隔符=为:,并给键加引号
    json = Regex.Replace(json, @"(\w+)\=", @"""$1"":");
    // 给大写标识符类型的字符串值加引号
    json = Regex.Replace(json, @"([A-Z_]+)(?=[,\}\]])", @"""$1""");
    // 闭合外层对象的括号
    json = Regex.Replace(json, @"(\})\]", @"}}$]");
    return json;
}

三、C#映射为对象的方法

1. 定义对应实体类

根据字符串结构定义C#实体类:

public class Vector2D
{
    public double x { get; set; }
    public double y { get; set; }
}

public class Vector3D
{
    public double x { get; set; }
    public double y { get; set; }
    public double z { get; set; }
}

public class Matrix3
{
    public List<double> values { get; set; }
}

public class Joint
{
    public string type { get; set; }
    public string status { get; set; }
    public Vector2D depthPosition { get; set; }
    public Vector3D worldPosition { get; set; }
    public Matrix3 orientation { get; set; }
}

public class HandPoseInfo
{
    public string leftHand { get; set; }
    public string rightHand { get; set; }
}

public class Body
{
    public int id { get; set; }
    public string status { get; set; }
    public Vector3D centerOfMass { get; set; }
    public List<Joint> joints { get; set; }
    public HandPoseInfo handPoseInfo { get; set; }
    public bool areJointsEnabled { get; set; }
    public bool areHandPosesEnabled { get; set; }
}

// 外层是Body数组的容器类
public class BodyContainer
{
    public Body Body { get; set; }
}

2. 反序列化JSON到对象

使用.NET内置System.Text.Json完成反序列化:

using System.Text.Json;

// 原始设备输出字符串
string rawStr = "[Body{id=0, status=NOT_TRACKING,...}]";
// 转为标准JSON
string jsonStr = ToJson(rawStr);
// 反序列化为Body数组
var bodyList = JsonSerializer.Deserialize<List<BodyContainer>>(jsonStr);

3. 直接解析字符串(可选)

若无需转JSON,可通过正则表达式递归解析字符串,手动映射到实体类属性,但实现复杂度较高,仅适合特殊场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:57:20