Какая библиотека JSON хорошо работает для вас в .NET? [закрыто]

Несколько определений из jls объясняют это (глава 14):

Блоки являются состояниями

Как указано здесь , Block является StatementWithoutTrailingSubstatement, который, в свою очередь, является StatementNoShortIf, который является Statement. Таким образом, когда требуется какое-либо из них, мы можем вставить Block.

Предложение if

. Хотя это также относится к for и while -loops, я буду использовать if -значения. Эти правила почти одинаковы. Синтаксическое описание if-statements можно найти здесь здесь .

IfThenStatement:
    if ( Expression ) Statement

IfThenElseStatement:
    if ( Expression ) StatementNoShortIf else Statement

IfThenElseStatementNoShortIf:
    if ( Expression ) StatementNoShortIf else StatementNoShortIf

Итак, мы можем использовать наш блок здесь.

Но с чем это связано? ?

; определяется как EmptyStatement ( link ), что также является StatementNoShortIf. Поэтому в условных фрагментах кода, таких как if-statement и циклы, мы можем заменить Block на EmptyStatement, если требуется StatementNoShortIf или Statement.

Таким образом, if(Expression)EmptyStatement works.

Почему это не дает ошибку?

Довольно просто: java дает ошибку, если находит недопустимый синтаксис. Но if(Expression)EmptyStatement - вполне допустимый синтаксис. Вместо этого javac выдает предупреждение при запуске с соответствующими параметрами. Полный список предупреждений, которые могут быть отключены для , для этой цели содержит имя-предупреждение empty. Таким образом, компиляция с -Xlint:all или -Xlint:empty будет генерировать предупреждение об этом.

В вашей среде IDE должна быть опция для включения такого предупреждения. Для eclipse см. Ответ

@ nullptr . В IntelliJ вы можете нажать Ctrl + Shift + A, ввести empty body в поле поиска и включить предупреждение (помечено на изображении)

Что это даже используется для?

Честно говоря, в нем мало пользы с минималистской точки зрения. Обычно есть способ добиться успеха без команды «ничего не делать». Скорее, речь идет о личных предпочтениях, предпочитаете ли вы использовать

if( a() && b() );

или

if( a() ) b();

, и это применимо и к другим случаям, в которых используется EmptyStatement. Важным моментом для рассмотрения этой темы является читаемость кода. Бывают случаи, когда код становится более читаемым, используя no-op. С другой стороны, есть случаи, когда код становится намного сложнее понять с помощью EmptyStatement - приведенный выше пример будет рассчитывать на более позднюю IMO.

30
задан Greg 16 August 2010 в 19:00
поделиться

5 ответов

Я использовал Json.NET с успехом в прошлом.

Пример от сайта:

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);
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
22
ответ дан brianng 16 August 2010 в 19:00
поделиться
  • 1
    Это работало как очарование, когда я должен был переименовать файлы со счетчиком ~ dir | % {$i = 46}{ move-item Это работало как очарование, когда я должен был переименовать файлы со счетчиком ~ [110] ("ARM-{0:00000}.pdf" -f $i++)} – dance2die 16 December 2017 в 06:22

Проверьте Систему. Время выполнения. Сериализация. Пространство имен Json, включенное с.NET 3.5.

3
ответ дан Richard 16 August 2010 в 19:00
поделиться
  • 1
    Также Вы, вероятно, don' t хотят искать каждый индекс объекта массива при итерации тех объектов. That' d быть линейным поиском каждого объекта; походит на создание одного повторения O (n^2):-), – Joey 24 November 2009 в 17:39

Я записал свой собственный сериализатор JSON с помощью DataContractJsonSerializer в System.ServiceModel.Web.dll блок [который является компонентом WCF, включенного в.NET 3.5 как стандартный блок, и в.NET 3,5 Клиентских Профиля SP1] (в.NET 4.0 и Silverlight 4, это было перемещено в System.Runtime.Serialization.dll).

using System.IO;
using System.Runtime.Serialization.Json;

public class JsonObjectSerializer 
{
    public string Serialize<T>(T instance) where T : class
    {
        var serializer = new DataContractJsonSerializer(typeof(T));
        using (var memoryStream = new MemoryStream())
        {
            serializer.WriteObject(memoryStream, instance);

            memoryStream.Flush();
            memoryStream.Position = 0;

            using (var reader = new StreamReader(memoryStream))
            {
                return reader.ReadToEnd();
            }
        }
    }

    public T Deserialize<T>(string serialized) where T : class
    {
        var serializer = new DataContractJsonSerializer(typeof(T));
        using (var memoryStream = new MemoryStream())
        {
            using (var writer = new StreamWriter(memoryStream))
            {
                writer.Write(serialized);
                writer.Flush();

                memoryStream.Position = 0;

                return serializer.ReadObject(memoryStream) as T;
            }
        }
    }
}
10
ответ дан Ruben Bartelink 16 August 2010 в 19:00
поделиться
  • 1
    Спасибо за это - I' d никогда замечаемый, что синтаксис с двумя наборами фигурных скобок после foreach. Это решило проблему совпадения двух массивов как это: $selected = $true,$false,$true; @('first','second','third') | % {$i=0}{If($selected[$i]){Спасибо за это - I' d никогда замечаемый, что синтаксис с двумя наборами фигурных скобок после foreach. Это решило проблему совпадения двух массивов как это: [110] для возврата ' first' и ' third'};$i++ } для возврата ' first' и ' third' – Rich Moss 27 April 2019 в 09:43

В каркас встроено по крайней мере два.

Более новые: System.Runtime.Serialization.Json

и более старые: System.Web. Script.Serialization

Я предпочитаю не иметь зависимостей от сторонних библиотек. Я работаю с JSON каждый день и никогда не нуждался в чем-то большем, чем то, что уже существует в фреймворке.

19
ответ дан 27 November 2019 в 23:43
поделиться

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

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

Customer customer = new Customer { Name="Joe Bloggs", Age=31 };
string json = customer.ToJson();
Customer fromJson = json.FromJson<Customer>(json); 
4
ответ дан 27 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: