使用convertAll更改数据结构

时间:2017-07-20 07:07:59

标签: c# linq

我正在寻找一种将动态JSON返回给用户的方法。 (就像在JavaScript中一样,您只需添加到JSON,无论您想要什么)

我想将数据结构更改为我正在使用的另一个数据结构convertAll

请看这里:

public dynamic SomeActionMethod()
{
    return Test_Get(). /* List<someClass> */
    ConvertAll(x =>
    {
        if (someConditionToCheckAgainst)
        {
            return new
            {
                subValue1 = x
            };
        }
        else
        {
            return new
            {
                 subValue2 = x                     
            }
        {

    };
}

我收到以下错误:

  

List.ConvertAll(转换器)&#39;无法从使用中推断出来。尝试显式指定类型参数。

这里做什么?

1 个答案:

答案 0 :(得分:0)

这不是最灵活的方法(请参阅JObject,Json.Net序列化指南),但这可以适用于您的示例:

public class Item
{
    public int? month { get; set; }
    public int? total { get; set; }
}

var intList = new List<int> { 4, 12 };
var resultList = intList.ConvertAll(r =>
{
    if (r == 4)
    {
        return new Item { month = r };
    }
    else
    {
        return new Item { total = r };
    }
});

var json = JsonConvert.Serialize(intList, Formatting.None,
    new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

请注意,monthtotal字段可以为空。使用指定设置进行序列化将不包括生成json的空字段。

Json将如下所示:[{ "month": 4 }, { "total": 12 }]