Создание массива JSON в С#
Хорошо, поэтому я пытаюсь отправить команды POST по http-соединению и использовать форматирование JSON для этого. Я пишу программу, чтобы сделать это на С#, и задавался вопросом, как я буду форматировать массив значений, которые будут переданы как JSON на сервер.
В настоящее время у меня есть это:
new {name = "command" , index = "X", optional = "0"}
Что переводится в JSON:
"name": "command",
"index": "X",
"optional": "0"
И я хочу создать массив, называемый элементами, где каждый элемент содержит эти три значения. Таким образом, это будет по существу массив объектов, в котором объект содержит имя, индекс и необязательное поле.
Я предполагал, что это будет что-то вроде этого:
new {items = [(name = "command" , index = "X", optional = "0"),
(name = "status" , index = "X", optional = "0")]}
Какой, если бы это был правильный синтаксис, перевел бы это в JSON:
"items":
[
{
"name": "command",
"index": "X",
"optional": "0"
},
{
"name": "status",
"index": "X",
"optional": "0"
}
]
Но, очевидно, я делаю это неправильно. Идеи? Любая помощь приветствуется.
Ответы
Ответ 1
Ты близко. Это должно сделать трюк:
new {items = new [] {
new {name = "command" , index = "X", optional = "0"},
new {name = "command" , index = "X", optional = "0"}
}}
Если ваш источник был перечислимым, вы можете сделать это:
new {items = source.Select(item => new
{
name = item.Name, index = item.Index, options = item.Optional
})};
Ответ 2
Вам лучше создать класс для каждого элемента вместо использования анонимных объектов. И в объекте, который вы сериализуете, у вас должен быть массив этих элементов. Например:.
public class Item
{
public string name { get; set; }
public string index { get; set; }
public string optional { get; set; }
}
public class RootObject
{
public List<Item> items { get; set; }
}
Использование:
var objectToSerialize = new RootObject();
objectToSerialize.items = new List<Item>
{
new Item { name = "test1", index = "index1" },
new Item { name = "test2", index = "index2" }
};
И в результате вам не придется менять вещи несколько раз, если вам нужно изменить структуру данных.
p.s. Вот очень хороший инструмент для сложного json
s
Ответ 3
Кроме того, с анонимными типами (я предпочитаю не) - это еще один подход.
void Main()
{
var x = new
{
items = new[]
{
new
{
name = "command", index = "X", optional = "0"
},
new
{
name = "command", index = "X", optional = "0"
}
}
};
JavaScriptSerializer js = new JavaScriptSerializer(); //system.web.extension assembly....
Console.WriteLine(js.Serialize(x));
}
результат:
{"items":[{"name":"command","index":"X","optional":"0"},{"name":"command","index":"X","optional":"0"}]}
Ответ 4
new {var_data[counter] =new [] {
new{ "S NO": "+ obj_Data_Row["F_ID_ITEM_MASTER"].ToString() +","PART NAME": " + obj_Data_Row["F_PART_NAME"].ToString() + ","PART ID": " + obj_Data_Row["F_PART_ID"].ToString() + ","PART CODE":" + obj_Data_Row["F_PART_CODE"].ToString() + ", "CIENT PART ID": " + obj_Data_Row["F_ID_CLIENT"].ToString() + ","TYPES":" + obj_Data_Row["F_TYPE"].ToString() + ","UOM":" + obj_Data_Row["F_UOM"].ToString() + ","SPECIFICATION":" + obj_Data_Row["F_SPECIFICATION"].ToString() + ","MODEL":" + obj_Data_Row["F_MODEL"].ToString() + ","LOCATION":" + obj_Data_Row["F_LOCATION"].ToString() + ","STD WEIGHT":" + obj_Data_Row["F_STD_WEIGHT"].ToString() + ","THICKNESS":" + obj_Data_Row["F_THICKNESS"].ToString() + ","WIDTH":" + obj_Data_Row["F_WIDTH"].ToString() + ","HEIGHT":" + obj_Data_Row["F_HEIGHT"].ToString() + ","STUFF QUALITY":" + obj_Data_Row["F_STUFF_QTY"].ToString() + ","FREIGHT":" + obj_Data_Row["F_FREIGHT"].ToString() + ","THRESHOLD FG":" + obj_Data_Row["F_THRESHOLD_FG"].ToString() + ","THRESHOLD CL STOCK":" + obj_Data_Row["F_THRESHOLD_CL_STOCK"].ToString() + ","DESCRIPTION":" + obj_Data_Row["F_DESCRIPTION"].ToString() + "}
}
};