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

C#如何将JSON中字符串格式的Embedding转换为浮点数值数组

解决方案

报错原因

你原有代码报错是因为JSON根节点下的doc字段是嵌套对象,不是字符串类型,和你指定的反序列化目标类型Dictionary<string, string>不匹配,所以解析失败。

实现方案

这里提供两种适合初学者的实现方式,都可以直接达到你要的效果:

方案1:用JObject动态处理(无需定义实体类,适合临时处理简单JSON)

你可以直接用Newtonsoft.Json提供的JObject动态操作JSON节点,不需要提前定义数据结构:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

// 你的原始JSON字符串
string rawJson = "{\"doc\":{\"Identifier\":\"01967R0422-19990101\",\"Year\":[],\"Embedding\":\"[0.001, -0.001, 0.002]\"}}";

// 1. 把原始JSON解析为JObject对象
JObject rootObj = JObject.Parse(rawJson);

// 2. 取出Embedding的字符串值
string embeddingStr = rootObj["doc"]["Embedding"].ToString();

// 3. 把字符串格式的数组反序列化为double类型数组
double[] embeddingArr = JsonConvert.DeserializeObject<double[]>(embeddingStr);

// 4. 替换原Embedding字段为数组,删除不需要的Year字段
rootObj["doc"]["Embedding"] = JToken.FromObject(embeddingArr);
rootObj["doc"]["Year"].Remove();

// 5. 输出处理后的JSON,Formatting.None表示不缩进,和你要的输出格式一致
string resultJson = rootObj.ToString(Formatting.None);
Console.WriteLine(resultJson);

运行后输出的内容完全符合你要求的格式。

方案2:强类型实体类处理(适合项目中稳定的业务逻辑)

如果后续还要频繁操作这个JSON结构,可以定义对应实体类做强类型转换,编译阶段就能排查类型错误:

using Newtonsoft.Json;

// 定义原始JSON对应的实体类
public class RawDataRoot
{
    [JsonProperty("doc")]
    public RawDoc Doc { get; set; }
}
public class RawDoc
{
    [JsonProperty("Identifier")]
    public string Identifier { get; set; }
    [JsonProperty("Embedding")]
    public string EmbeddingStr { get; set; }
}

// 定义输出结果对应的实体类
public class OutputDataRoot
{
    [JsonProperty("doc")]
    public OutputDoc Doc { get; set; }
}
public class OutputDoc
{
    [JsonProperty("Identifier")]
    public string Identifier { get; set; }
    [JsonProperty("Embedding")]
    public double[] Embedding { get; set; }
}

// 处理逻辑
string rawJson = "{\"doc\":{\"Identifier\":\"01967R0422-19990101\",\"Year\":[],\"Embedding\":\"[0.001, -0.001, 0.002]\"}}";
// 反序列化原始数据
RawDataRoot rawData = JsonConvert.DeserializeObject<RawDataRoot>(rawJson);
// 转换Embedding格式
double[] embeddingArr = JsonConvert.DeserializeObject<double[]>(rawData.Doc.EmbeddingStr);
// 构造输出对象
OutputDataRoot outputData = new OutputDataRoot
{
    Doc = new OutputDoc
    {
        Identifier = rawData.Doc.Identifier,
        Embedding = embeddingArr
    }
};
// 转成最终JSON
string resultJson = JsonConvert.SerializeObject(outputData);

前置依赖说明

如果你的项目还未引入Newtonsoft.Json,直接在NuGet包管理器搜索Newtonsoft.Json安装即可使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:06:02