我正在尝试使用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].
答案 0 :(得分:1)
嗯,我不知道它是否更漂亮,但你可以使用Aggregate:
fieldList.Aggregate(new JObject(), (obj, next) => {obj[next.Name] = new JValue(next.Value); return obj;})
如果JObject有一个可链接的API会很好,但它似乎不是。
答案 1 :(得分:1)
下面
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);