我正在尝试使用c# LINQ来构建一个JObject。我知道我可以使用循环,例如
var jobj = new JObject();
foreach (var field in fieldList)
{
jobj[field.Name] = new JValue(field.Value);
}
是否可以用LINQ代替循环?我试过了,
var data = fieldList.Select(field => new KeyValuePair<string, JValue>(field.Name, new JValue(field.Value)));
var jobj = new JObject(data);
,但它失败了,出现以下错误:
Could not determine JSON object type for type System.Collections.Generic.KeyValuePair`2[
System.String,Newtonsoft.Json.Linq.JValue].
这里
jobj[field.Name] = new JValue(field.Value);
实际上是在调用以下JObject
索引器:
public JToken this[string propertyName] { get; set; }
。您正在设置JObject
属性。
那么LINQ的等价将是这样的:
var data = fieldList.Select(field => new JProperty(field.Name, field.Value));
var jobj = new JObject(data);
嗯,我不知道它是否更漂亮,但你可以使用Aggregate:
fieldList.Aggregate(new JObject(), (obj, next) => {obj[next.Name] = new JValue(next.Value); return obj;})
如果JObject有一个可链接的API就好了,但它似乎没有。