Можем ли мы инициализировать объект / коллекцию, используя LINQ в JSON-подобном синтаксисе? - PullRequest
1 голос
/ 28 октября 2010

Можем ли мы сделать что-то подобное или нечто подобное?

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 ]

1 голос
/ 28 октября 2010

Вы можете сделать его короче, но не совсем как в 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"}
};
1 голос
/ 28 октября 2010

Неа. Что вы продемонстрировали, так это допустимый синтаксис для инициализаторов коллекции и объекта.

Если вы пытаетесь несколько сократить его, вы можете сбросить завершающий () каждого инициализатора, например:

var list = new List<Staff>
{
    new Staff {ID = 1, Name = "John"},
    new Staff {ID = 2, Name = "Mark"}
}
0 голосов
/ 28 октября 2010

Самое близкое, что вы можете получить:

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.

...