【问题标题】:asp.net web api return array of json objects with dynamic keysasp.net web api返回带有动态键的json对象数组
【发布时间】:2016-07-13 13:44:46
【问题描述】:

如何返回带有动态键的json对象数组,例如:

[
    "dynamic prop 1": {
          "title": "abc",
          "sku": "123"
        },
    "dynamic prop 2": {
          "title": "xyz",
          "sku": "789"
        }
]

默认格式为:

[
        {
          "title": "abc",
          "sku": "123"
        },
        {
          "title": "xyz",
          "sku": "789"
        }
]

【问题讨论】:

  • 我假设您使用的是 .NET 动态类型?
  • 没有。我只是想强调该属性可以是任何东西。例如,title 和 sku 是我知道的属性,但对象的“key/name/id”可以是任何字符串。
  • 了解,但您正在服务器上构建此对象。所以你可以使用动态类型并返回一个 JObject。
  • 是的,在服务器上。目前我正在返回这个:return data.Select(x => new { title = x.title, sku = x.sku });
  • 使用 stringbuilder 并简单地构建你想要的 json 字符串。

标签: asp.net asp.net-web-api asp.net-web-api2


【解决方案1】:

使用 JObject 解决了这个问题:

JObject jProducts= new JObject();

foreach (var p in products)
{
    var o = new JObject()
    {
        { "title",  p.Title},
        { "sku", p.Sku }
    };

    jProducts.Add(p.Name, o);
}

return Request.CreateResponse(HttpStatusCode.OK, jProducts);

感谢 william-xifaras

【讨论】:

    【解决方案2】:

    使用返回对象列表。 对象(比如 MyObj)具有以下属性:title 和 sku。 然后你会得到想要的输出。 您要返回的数据将如下所示:

    List<MyObj> data=new List<MyObj>();
    // add your objects.
    // return this list object.
    

    你会得到你想要的格式输出。

    【讨论】:

    • 这是不正确的。这是我已经得到的默认格式。
    【解决方案3】:

    然后返回动态对象。

    return new{ property1Name=MyObj1,property2Name=MyObj2}
    

    我希望这对你有用。

    否则请参考以下链接以从 json 生成 c# 类并在您的解决方案中创建所需的模型。 https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjEl7efl_XNAhWJs48KHYDHAUsQFggfMAA&url=http%3A%2F%2Fjson2csharp.com%2F&usg=AFQjCNEbR-mTF-PU4BYWff3opCDcJOl0ag&bvm=bv.127178174,d.c2I

    【讨论】:

    • 这就是我目前正在做的,但它并没有解决问题。 “property1Name”是一个变量,所以我不能使用上面的语法。
    【解决方案4】:

    那你参考

    Tuple data type and learn about it.
    

    它可能适合你。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      相关资源
      最近更新 更多