我想将JSON文件中的配置绑定到**HttpApiClientOptions
的示例。但是,绑定Body
属性时遇到了一些问题。定义为Dictionary<string, object>?
后,Body
属性正确包含model
和temperature
键值对,但messages
的值为空,无法从中检索{"role":"user", "content":"hello!"}
**。
C#代码:
var config = new ConfigurationBuilder()
.AddJsonFile(configFilePath, false, false)
.Build();
//...
config.GetSection("apiClientOptions").GetSection(apiClientName).Bind(apiClientOptions);
字符串
HttpApiClientOptions类:
public class HttpApiClientOptions : BaseApiClientOptions
{
public string Url { get; set; }
public Dictionary<string, string>? Headers { get; set; }
public Dictionary<string, string>? Params { get; set; }
public Dictionary<string, object>? Body { get; set; }
}
型
JSON配置:
{
"url": "https://example.com",
"headers": {
"Authorization": "Bearer sk-"
},
"params": {},
"body": {"model": "gpt-3.5-turbo", "messages": [{"role":"user", "content":"hello!"}], "temperature": 0.7}
}
型
我试图将**Body
定义为JObject
或JsonElement
,但这种方法也无法从第一层嵌套中检索值。
我没有将整个Body
节点Map到特定类型的原因是Body
节点下的内容和嵌套深度不确定。有没有办法让程序在配置过程中从JSON文件中读取body
**节点内部的所有信息?
3条答案
按热度按时间vxf3dgd41#
现在,我还将Body定义为
Dictionary<string, string>
,其中的值包含Body
节点下的原始内容。但是,在填写JSON配置文件时,这种方法变得非常麻烦。有没有更好的方法来做到这一点?JSON配置文件中的“body”字段示例:
字符串
vzgqcmou2#
你应该明白一件事,配置不是JSON,它是键值对的集合,JSON文件不是配置的单一来源。从the docs开始:
.NET中的配置使用一个或多个配置提供程序执行。配置提供程序使用各种配置源从键值对读取配置数据:
所以
Dictionary<string, object>
对binder来说没有太大意义。一个选项-为所有级别提供实际类型:字符串
另一种方法是从模型中排除
Body
,并通过GetChildren
从某个点动态读取配置并处理结果:型
还有
型
bd1hkmkf3#
native config反序列化只适用于一个级别。如果你有一个嵌套的对象,最好使用这个语法
字符串
试验,试验
型