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

JObject转匿名类型实现方案咨询:可变JSON格式转换需求

嘿,这个需求我刚好折腾过,给你分两部分来解决——先搞定字符串格式化的问题,再聊聊动态创建对象的可行方案:

一、将JObject格式化为目标字符串格式

因为你的JSON结构不固定,所以得动态遍历所有属性来拼接成想要的格式。这里用Newtonsoft.Json的JObject来实现,核心思路是遍历每个属性,根据值的类型决定是否加引号,最后拼接成目标字符串:

using Newtonsoft.Json.Linq;

public string FormatJObjectToCustomString(JObject jObject)
{
    var propertyStrings = new List<string>();
    
    foreach (var prop in jObject.Properties())
    {
        // 判断值类型,字符串需要包裹双引号
        string valueRepresentation = prop.Value.Type switch
        {
            JTokenType.String => $"\"{prop.Value.ToString()}\"",
            _ => prop.Value.ToString()
        };
        
        propertyStrings.Add($"{prop.Name} = {valueRepresentation}");
    }
    
    return $"{{ {string.Join(", ", propertyStrings)} }}";
}

调用的时候直接传你的JObject就行,比如:

var jsonStr = "{\"Prop1\":\"Prop1Value\",\"Prop2\":1,\"Prop3\":\"Prop3Value\",\"dtProp\":\"2019-12-30T09:59:48\"}";
var jObject = JObject.Parse(jsonStr);
var result = FormatJObjectToCustomString(jObject);
// result就是你要的:{ Prop1 = "Prop1Value", Prop2 = 1, Prop3 = "Prop3Value", dtProp = "2019-12-30T09:59:48" }
二、动态创建对象的方案

既然JSON结构不固定,强类型肯定不行,这里有两个常用的动态对象方案:

1. 使用ExpandoObject(推荐,支持对象式属性访问)

ExpandoObject允许你动态添加属性,之后可以像访问普通对象属性一样操作它,非常灵活:

using System.Dynamic;
using Newtonsoft.Json.Linq;

public dynamic ConvertJObjectToDynamic(JObject jObject)
{
    dynamic expandoObj = new ExpandoObject();
    var expandoDict = (IDictionary<string, object>)expandoObj;
    
    foreach (var prop in jObject.Properties())
    {
        // 自动转换值的类型
        expandoDict[prop.Name] = prop.Value.ToObject<object>();
    }
    
    return expandoObj;
}

使用示例:

var dynamicObj = ConvertJObjectToDynamic(jObject);
// 可以直接用属性名访问:dynamicObj.Prop1,dynamicObj.Prop2等等
Console.WriteLine(dynamicObj.dtProp); // 输出2019-12-30T09:59:48

2. 使用Dictionary<string, object>(轻量,适合简单场景)

如果不需要对象式的属性访问,用字典更轻量,转换也更简单:

using Newtonsoft.Json.Linq;

public Dictionary<string, object> ConvertJObjectToDictionary(JObject jObject)
{
    // 直接用Newtonsoft的内置转换方法
    return jObject.ToObject<Dictionary<string, object>>();
}

使用示例:

var dict = ConvertJObjectToDictionary(jObject);
Console.WriteLine(dict["Prop3"]); // 输出Prop3Value

这两种方案都能完美应对结构不固定的JSON场景,你可以根据后续的使用需求来选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:08:24