0

我正在使用 ServiceStack.Text JsonObject 解析器映射到我的域模型。我基本上可以正常工作,除非使用 Linq 过滤 ArrayObject 并尝试使用 convertAll 对其进行转换。Iam 在使用链接后无法实际出现,将逐个元素添加到 JsonArrayObjects 列表然后传递它。

var tmpList = x.Object("references").ArrayObjects("image").Where(y => y.Get<int>("type") != 1).ToList();
JsonArrayObjects tmpStorage = new JsonArrayObjects();
foreach (var pic in tmpList) {
    tmpStorage.Add(pic);
}
if (tmpStorage.Count > 0) {
    GalleryPictures = tmpStorage.ConvertAll(RestJsonToModelMapper.jsonToImage);
}

问题:有没有更优雅的方式从 IEnumarable 返回到 JsonArrayObjects?转换不起作用,因为 where 将元素复制到列表中,而不是操作旧的,因此结果不是向下转换的 JsonArrayObjects,而是一个新的 List 对象。

最好的

4

2 回答 2

1

考虑到这更优雅是有争议的,但我可能会这样做:

var tmpStorage = new JsonArrayObjects();
tmpList.ForEach(pic => tmpStorage.Add(RestJsonToModelMapper.jsonToImage(pic)));

而如果频繁使用这种转换,可以创建一个扩展方法:

public static JsonArrayObjects ToJsonArrayObjects(this IEnumerable<JsonObject> pics)
{
    var tmpStorage = new JsonArrayObjects();

    foreach(var pic in pics)
    {
        tmpStorage.Add(RestJsonToModelMapper.jsonToImage(pic));
    }

    return tmpStorage;
}

这样你最终会得到更简单的消费者代码:

var tmpStorage = x.Object("references")
                  .ArrayObjects("image")
                  .Where(y => y.Get<int>("type") != 1)
                  .ToJsonArrayObjects();
于 2015-01-27T14:19:46.580 回答
1

像这样?

var pictures = x.Object("references")
     .ArrayObjects("image")
     .Where(y => y.Get<int>("type") != 1)
     .Select(RestJsonToModelMapper.JsonToImage)
     .ToList();
于 2016-02-09T15:06:06.310 回答