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

.NET 7中如何从JSON模型类生成格式化参数字符串

实现方案

1. 定义通用接口与默认实现

先定义IArguments接口,利用.NET 7的接口默认方法特性,把ToArguments()的通用逻辑写在接口里,所有实现该接口的类都能直接调用,不用重复编写代码:

using System.Reflection;
using System.Text;

public interface IArguments
{
    string ToArguments()
    {
        StringBuilder sb = new StringBuilder();
        // 获取当前类的所有公共实例属性
        PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
        
        foreach (var prop in properties)
        {
            object? value = prop.GetValue(this);
            if (value == null) continue; // 跳过空值属性
            
            // 处理值的格式:字符串类型加双引号,其他直接转字符串
            string formattedValue = value is string str 
                ? $"\"{str}\"" 
                : value.ToString()!;
            
            // 拼接成指定格式的参数片段
            sb.Append($" -argument {prop.Name}={formattedValue}");
        }
        
        // 去掉开头多余的空格,返回结果
        return sb.ToString().TrimStart();
    }
}

2. 创建JSON模型类并实现接口

你的JSON模型类只需实现IArguments接口,无需额外编写其他代码:

using System.Text.Json.Serialization;

// 示例模型类
public class MyArgs : IArguments
{
    [JsonPropertyName("propertyA")]
    public string PropertyA { get; set; } = string.Empty;
    
    [JsonPropertyName("propertyB")]
    public int PropertyB { get; set; }
    
    // 新增属性时直接添加,ToArguments()会自动适配
    [JsonPropertyName("propertyC")]
    public bool PropertyC { get; set; }
}

3. 反序列化后调用方法

用System.Text.Json反序列化得到实例后,直接调用ToArguments()即可生成目标参数字符串:

using System.Text.Json;

// 示例JSON字符串
string json = @"{""propertyA"":""some text"",""propertyB"":123,""propertyC"":true}";

// 反序列化
MyArgs args = JsonSerializer.Deserialize<MyArgs>(json)!;

// 生成参数字符串
string arguments = args.ToArguments();
// 输出结果:-argument PropertyA="some text" -argument PropertyB=123 -argument PropertyC=True

关键说明

  • 反射的作用:这里用反射自动获取类的所有公共属性,新增属性时只要保持公共实例属性的定义,ToArguments()会自动识别并处理,完全不用修改方法代码。
  • 值格式处理:针对字符串类型自动添加双引号,其他类型直接调用ToString(),如果需要支持更多类型(比如枚举、日期),可以在循环里添加对应的判断逻辑。
  • 空值处理:跳过值为null的属性,避免生成无效的参数片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:18