【问题标题】:How do i do this in Linq?我如何在 Linq 中做到这一点?
【发布时间】:2009-05-14 13:14:40
【问题描述】:

我有一个IList<Foo>,我正在尝试将其序列化为Json,结果中不包含字段名称。因此,我正在尝试创建一个 匿名对象,我将其传递给 Json 序列化方法。

Foo 定义为(伪代码):-

public class Foo
{
    public int X;
    public int Y;
}

当我将其作为 Json 返回时...

return Json(foos);

结果是这样的

... [{"X":1,"Y":2},{"X":3,"Y":4}...]

我不希望 X 和 Y 在那里。所以我追求..

... [{1,2},{3,4}...]

所以我试图做以下事情(这不起作用)

(from p in foos
 select new p.X + "," + p.Y).ToArray()

(from p in foos
 select new string(p.X+ "," + p.Y)).ToArray()

但无济于事(不编译)。

有人可以帮忙吗?

【问题讨论】:

    标签: .net linq json


    【解决方案1】:
    (from p in foos
     select String.Format("{{{0}, {1}}}", p.X, p.Y)).ToArray()
    

    【讨论】:

    • 上帝,Linq 优雅而强大。
    【解决方案2】:
    foos.Select(p=>p.X + "," + p.Y)
    

    或者如果你更喜欢 Linq 语法:

    (from p in foos
     select p.X + "," + p.Y).ToArray()
    

    【讨论】:

      【解决方案3】:

      JSON 是成员序列化程序,并使用名称。如果您不想要名称,请不要使用 JSON。那么也许只是StringBuilder

      StringBuilder sb = new StringBuilder("[");
      foreach(var foo in items) {
        sb.Append('{').Append(foo.X).Append(',').Append(foo.Y).Append("},");
      }
      sb[sb.Length - 1] = ']';
      string s = sb.ToString();
      

      【讨论】:

      • LINQ 是一个工具。只是一个工具。这不是所有问题的答案。
      • true .. 但我发现我通过一些简洁的 linq 查询使我的代码更具可读性。
      【解决方案4】:

      为什么不自己创建 JSON 字符串,这样您就可以完全控制它的设置方式,而不是使用序列化方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 2011-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多