Как создать строку JSON в C # - PullRequest
211 голосов
/ 29 июня 2009

Я просто использовал XmlWriter для создания некоторого XML для отправки обратно в ответ HTTP. Как бы вы создали строку JSON. Я предполагаю, что вы просто используете string Builder для построения строки JSON, и они форматируют ваш ответ как JSON?

Ответы [ 13 ]

339 голосов
/ 29 сентября 2012

Использование Newtonsoft.Json делает это действительно проще:

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);

Документация: Сериализация и десериализация JSON

237 голосов
/ 29 июня 2009

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

Код из статьи:

namespace ExtensionMethods
{
    public static class JSONHelper
    {
        public static string ToJSON(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }

        public static string ToJSON(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.RecursionLimit = recursionDepth;
            return serializer.Serialize(obj);
        }
    }
}

Использование:

using ExtensionMethods;

...

List<Person> people = new List<Person>{
                   new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
                   new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
                   };


string jsonString = people.ToJSON();
18 голосов
/ 29 июня 2009

Эта библиотека очень хороша для JSON из C #

http://james.newtonking.com/pages/json-net.aspx

12 голосов
/ 29 июня 2009

Этот фрагмент кода использует DataContractJsonSerializer из System.Runtime.Serialization.Json в .NET 3.5.

public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
    var serializer = new DataContractJsonSerializer(typeof(T));

    using (var stream = new MemoryStream())
    {
        using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
        {
            serializer.WriteObject(writer, value);
        }

        return encoding.GetString(stream.ToArray());
    }
}
7 голосов
/ 18 августа 2010

Вы также можете попробовать мой ServiceStack JsonSerializer это самый быстрый сериализатор .NET JSON на данный момент. Он поддерживает сериализацию DataContracts, любых типов POCO, интерфейсов, объектов с поздним связыванием, включая анонимные типы и т. Д.

Базовый пример

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 

Примечание. Используйте MicrosoftSoftizer JavaScript только в том случае, если производительность не важна для вас, поскольку мне пришлось исключить ее из моих тестов, поскольку она на 40x-100x медленнее, чем в других сериализаторах JSON. *

7 голосов
/ 29 июня 2009

Взгляните на http://www.codeplex.com/json/ для проекта json-net.aspx. Зачем изобретать велосипед?

6 голосов
/ 01 ноября 2012

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

class templateRequest
{
    public String[] registration_ids;
    public Data data;
    public class Data
    {
        public String message;
        public String tickerText;
        public String contentTitle;
        public Data(String message, String tickerText, string contentTitle)
        {
            this.message = message;
            this.tickerText = tickerText;
            this.contentTitle = contentTitle;
        }                
    };
}

и затем вы можете получить строку JSON с вызовом

List<String> ids = new List<string>() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Your message", "Your ticker", "Your content");

string json = new JavaScriptSerializer().Serialize(request);

Результат будет таким:

json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"

Надеюсь, это поможет!

5 голосов
/ 29 июня 2009

Если вы не можете или не хотите использовать два встроенных сериализатора JSON ( JavaScriptSerializer и DataContractJsonSerializer ), вы можете попробовать JsonExSerializer библиотека - я использую ее в ряде проектов и работает довольно хорошо.

2 голосов
/ 29 июня 2009

Если вы пытаетесь создать веб-сервис для передачи данных через JSON на веб-страницу, рассмотрите возможность использования набора инструментов ASP.NET Ajax:

http://www.asp.net/learn/ajax/tutorial-05-cs.aspx

Он автоматически преобразует ваши объекты, обслуживаемые через веб-сервис, в json и создаст прокси-класс, который вы сможете использовать для подключения к нему.

1 голос
/ 21 февраля 2017

Использование кодирования

Простой объект в массив JSON EncodeJsObjectArray ()

public class dummyObject
{
    public string fake { get; set; }
    public int id { get; set; }

    public dummyObject()
    {
        fake = "dummy";
        id = 5;
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append('[');
        sb.Append(id);
        sb.Append(',');
        sb.Append(JSONEncoders.EncodeJsString(fake));
        sb.Append(']');

        return sb.ToString();
    }
}

dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();

dummys[0].fake = "mike";
dummys[0].id = 29;

string result = JSONEncoders.EncodeJsObjectArray(dummys);

Результат: [[29, "Mike"], [5, "фиктивный"]]

Хорошее использование

Довольно печатный JSON Array PrettyPrintJson () метод расширения строки

string input = "[14,4,[14,\"data\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();

Результаты:

[
   14,
   4,
   [
      14,
      "data"
   ],
   [
      [
         5,
         "10.186.122.15"
      ],
      [
         6,
         "10.186.122.16"
      ]
   ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...