我们可以使用类似JSON的语法中的LINQ初始化对象/集合吗?

时间:2010-10-28 14:36:35

标签: c# .net linq json c#-3.0

我们可以做类似的事情吗?

var staffs = {
               "Staff": 
               [
                { "ID" : 1, "Name" : "John" },
                { "ID" : 2, "Name" : "Mark"}
               ]
            };

foreach (var staff in staffs)
{
    Console.WriteLine("ID: {0}", staff.ID);
    Console.WriteLine("Name: {0}", staff.Name);
}



而不是这个长代码:

public class Test
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
            return;

        List<Staff> staffs = new List<Staff>()
        {
            new Staff() {ID = 1, Name = "John"},
            new Staff() {ID = 2, Name = "Mark"}
        };

        foreach (var staff in staffs)
        {
            Console.WriteLine("ID: {0}", staff.ID);
            Console.WriteLine("Name: {0}", staff.Name);
        }
    }
}

public class Staff
{
    public int ID { get; set; }
    public string Name { get; set; }
}

我试过,但Visual Studio显示语法错误。

3 个答案:

答案 0 :(得分:1)

不。您演示的是集合和对象初始化器的允许语法。

如果您尝试稍微缩短它,可以删除每个初始化程序的尾随(),例如:

var list = new List<Staff>
{
    new Staff {ID = 1, Name = "John"},
    new Staff {ID = 2, Name = "Mark"}
}

答案 1 :(得分:1)

你可以缩短它但不完全像JSON。

List<Staff> staffs = new List<Staff>()
{
    new Staff() {ID = 1, Name = "John"},
    new Staff() {ID = 2, Name = "Mark"}
};

...你可以变成:(这是一个不是List<T>的数组,但你可以把它包起来)

var staffs = new[]
{
    new Staff {ID = 1, Name = "John"},
    new Staff {ID = 2, Name = "Mark"}
};

答案 2 :(得分:0)

最接近的是:

var staffs = new List<Staff> {
                new Staff{ ID : 1, Name : "John" },
                new Staff{ ID : 2, Name : "Mark"}

            };

foreach (var staff in staffs)
{
    Console.WriteLine("ID: {0}", staff.ID);
    Console.WriteLine("Name: {0}", staff.Name);
}

注意:成员名称和值未引用,但是强类型(与json不同)。

您可以使用Json序列化程序将JSON表示直接反序列化到对象图。