Подтвердить что ты не робот

Строка Parse Json в С#

Я пытаюсь прочитать строку Json на С#, но мне трудно понять, как разбирать строку в С#. Скажем, у меня есть следующая строка Json

[
    {
        "AppName": {
            "Description": "Lorem ipsum dolor sit amet",
            "Value": "1"
        },
        "AnotherAppName": {
            "Description": "consectetur adipisicing elit",
            "Value": "String"
        },
        "ThirdAppName": {
            "Description": "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
            "Value": "Text"
        },
        "Application": {
            "Description": "Ut enim ad minim veniam",
            "Value": "100"
        },
        "LastAppName": {
            "Description": "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat",
            "Value": "ZZZ"
        }
    }
]

Я хочу проанализировать это в arraylist или словаре, используя формат, например

descriptionList["AppName"] = "Lorem ipsum dolor sit amet";
valueList["AppName"] = "1";

Я играл с Json.Net, но примеры, которые я видел, не дают мне четкого представления о том, как я должен это делать. Какой лучший способ достичь этого? Не могу ли это сделать, как в jQuery, используя инструкцию foreach?

4b9b3361

Ответ 1

Я использую Json.net в своем проекте, и он отлично работает. В этом случае вы можете сделать это, чтобы проанализировать ваш json:

EDIT: я изменил код, чтобы он поддерживал чтение вашего json файла (массива)

Код для синтаксического анализа:

void Main()
{
    var json = System.IO.File.ReadAllText(@"d:\test.json");

    var objects = JArray.Parse(json); // parse as array  
    foreach(JObject root in objects)
    {
        foreach(KeyValuePair<String, JToken> app in root)
        {
            var appName = app.Key;
            var description = (String)app.Value["Description"];
            var value = (String)app.Value["Value"];

            Console.WriteLine(appName);
            Console.WriteLine(description);
            Console.WriteLine(value);
            Console.WriteLine("\n");
        }
    }
}

Вывод:

AppName
Lorem ipsum dolor sit amet
1


AnotherAppName
consectetur adipisicing elit
String


ThirdAppName
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
Text


Application
Ut enim ad minim veniam
100


LastAppName
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
ZZZ

Кстати, вы можете использовать LinqPad, чтобы проверить свой код, проще, чем создавать решение или проект в Visual Studio. Я думаю.

Ответ 2

вы можете попробовать с помощью System.Web.Script.Serialization.JavaScriptSerializer:

var json = new JavaScriptSerializer();
var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(jsonStr);

Ответ 3

json:
[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

С# code: взять только одно значение, например слово "велосипед".

//res=[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

         dynamic stuff1 = Newtonsoft.Json.JsonConvert.DeserializeObject(res);
         string Text = stuff1[0].hws[2];
         Console.WriteLine(Text);

выход:

bike

Ответ 4

Вместо арраиста или словаря вы также можете использовать динамический. Большую часть времени я использую EasyHttp для этого, но обязательно будут другие проекты, которые делают то же самое. Пример ниже:

var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var response = http.Get("url");
var body = response.DynamicBody;
Console.WriteLine("Name {0}", body.AppName.Description);
Console.WriteLine("Name {0}", body.AppName.Value);

В NuGet: EasyHttp

Ответ 5

То, что вы пытаетесь десериализовать в словаре, на самом деле является объектом Javascript, сериализованным в JSON. В Javascript вы можете использовать этот объект как ассоциативный массив, но на самом деле это объект, в отношении стандарта JSON.

Таким образом, у вас не будет проблем с десериализацией того, что у вас есть со стандартным сериализатором JSON (например,.net, DataContractJsonSerializer и JavascriptSerializer) для объекта (с элементами, называемыми AppName, AnotherAppName и т.д.), но на самом деле интерпретировать это как словарь вам понадобится сериализатор, который идет дальше, чем спецификация Json, которая, насколько мне известно, ничего не знает о словарях.

Одним из таких примеров является тот, который все используют: JSON.net

Есть другое решение, если вы не хотите использовать внешнюю библиотеку, которая должна преобразовать ваш объект Javascript в список, прежде чем сериализовать его в JSON.

var myList = [];
$.each(myObj, function(key, value) { myList.push({Key:key, Value:value}) });

теперь, если вы сериализуете myList для объекта JSON, вы должны быть десериализованы до List<KeyValuePair<string, ValueDescription>> с любым из вышеупомянутых сериализаторов. Тогда этот список станет совершенно очевидным для преобразования в словарь.

Примечание: ValueDescription - это класс:

public class ValueDescription
{
    public string Description { get; set; }
    public string Value { get; set; }
}