JSON в C # (желательно без сторонних инструментов) - PullRequest
0 голосов
/ 01 июня 2011

Я видел довольно много способов вывода JSON на C #.Однако ни один из них не кажется легким.Впрочем, это может быть из-за моего незнания C #.

Вопрос: Если бы вы писали JSON (для использования в JavaScript позже), как бы вы это сделали?Я бы предпочел не использовать сторонние инструменты;однако это не ультиматум любого рода.Можно ли использовать JSON в C # ASP.NET "из коробки"?

Пример JSON, который я хочу написать:

{
    "Trips": [
        {
            "from": "here",
            "to": "there",
            "stops": [
                {
                    "place": "middle1",
                    "KMs": 37
                },
                {
                    "place": "middle2",
                    "KMs": 54
                }
            ]
        },
        {
            "from": "there",
            "to": "here",
            "stops": [
                {
                    "place": "middle2",
                    "KMs": 37
                },
                {
                    "place": "middle1",
                    "KMs": 54
                }
            ]
        }
    ]
}

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

Как насчет JavaScriptSerializer ? Отличное интегрированное решение, которое можно расширить с помощью JavaScriptConverter s.


Демонстрация того, кем вы были после:

using System;
using System.Web.Script.Serialization;
using System.Text;

public class Stop
{
    public String place { get; set; }
    public Int32 KMs { get; set; }
}

public class Trip
{
    public String from { get; set; }
    public String to { get; set; }
    public Stop[] stops { get; set; }
}

public class MyJSONObject
{
    public Trip[] Trips { get; set; }

    public override String ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (Trip trip in this.Trips)
        {
            sb.AppendFormat("Trip:\r\n");
            sb.AppendFormat("\t   To: {0}\r\n", trip.to);
            sb.AppendFormat("\t From: {0}\r\n", trip.from);
            sb.AppendFormat("\tStops:\r\n");
            foreach (Stop stop in trip.stops)
            {
                sb.AppendFormat("\t\tPlace: {0}\r\n", stop.place);
                sb.AppendFormat("\t\t  KMs: {0}\r\n", stop.KMs);
            }
            sb.AppendLine();
        }
        return sb.ToString();
    }
}
public class Test
{
    public static void Main()
    {
        String example = "{\"Trips\":[{\"from\":\"here\",\"to\":\"there\",\"stops\":[{\"place\":\"middle1\",\"KMs\":37},{\"place\":\"middle2\",\"KMs\":54}]},{\"from\":\"there\",\"to\":\"here\",\"stops\":[{\"place\":\"middle2\",\"KMs\":37},{\"place\":\"middle1\",\"KMs\":54}]}]}";

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        // Parse the string to our custom object
        MyJSONObject result = serializer.Deserialize<MyJSONObject>(example);
        Console.WriteLine("Object deserialized:\r\n\r\n{0}\r\n\r\n", result);

        // take our custom object and dump it in to a string
        StringBuilder sb = new StringBuilder();
        serializer.Serialize(result, sb);
        Console.WriteLine("Object re-serialized:\r\n\r\n{0}\r\n\r\n", sb);

        // check step
        Console.WriteLine(example.Equals(sb.ToString()) ? "MATCH" : "NO match");
    }
}

И вывод:

Object deserialized:

Trip:
           To: there
         From: here
        Stops:
                Place: middle1
                  KMs: 37
                Place: middle2
                  KMs: 54

Trip:
           To: here
         From: there
        Stops:
                Place: middle2
                  KMs: 37
                Place: middle1
                  KMs: 54




Object re-serialized:

{"Trips":[{"from":"here","to":"there","stops":[{"place":"middle1","KMs":37},{"pl
ace":"middle2","KMs":54}]},{"from":"there","to":"here","stops":[{"place":"middle
2","KMs":37},{"place":"middle1","KMs":54}]}]}

MATCH
Press any key to continue . . .
2 голосов
/ 01 июня 2011

Существует JavaScriptSerializer от System.Web.Extensions.dll (.NET 3.5 SP1)

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

1 голос
/ 01 июня 2011

Вы действительно должны взглянуть на Json.NET

Мало того, что эта библиотека работает превосходно, она также может анализировать JSON.Это означает, что вы можете легко выполнять обходные операции и общаться через JSON без использования сервисного уровня WCF.Это также делает другие полезные вещи, такие как предоставление запрашиваемой динамической объектной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...