Как записать значение одного свойства json в одну строку?

Необходимо записать значение свойства "Координаты" в json без переноса для следующих строк, не используя ToString() (без преобразования значения в строку). Желаемый результат показан ниже.

{
          "Id": null,
          "Style": "1234",
          "Geometry": {
            "Type": "Polygon",
            "Coordinates": [[[47541.470259278358,6846.8710054924586],[47540.359922950891,6845.4552435801925],[47541.470259278358,6846.8710054924586]]],
            "Properties": [
              {
                "PointType": "Straight"
              },
              {
                "PointType": "Straight"
              },
              {
                "PointType": "Straight"
              }
            ]
       }
}

но нет:

{
          "Id": null,
          "Style": "1234",
          "Geometry": {
            "Type": "Polygon",
            "Coordinates": "[[[47541.470259278358,6846.8710054924586],[47540.359922950891,6845.4552435801925],[47541.470259278358,6846.8710054924586]]]",
            "Properties": [
              {
                "PointType": "Straight"
              },
              {
                "PointType": "Straight"
              },
              {
                "PointType": "Straight"
              }
            ]
       }
}

Функция, которая сериализует соответствующий объект класса в json:

JToken ToJson()
        {
            using (var writer = new JTokenWriter()) {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(writer, this);
                return writer.Token;
            }
        }

person DonilZ    schedule 28.03.2019    source источник
comment
Под одной строкой вы подразумеваете одну строку кода C# или одну строку JSON?   -  person Sweeper    schedule 28.03.2019
comment
одна строка JSON   -  person DonilZ    schedule 28.03.2019
comment
Пожалуйста, предоставьте нам несколько строк кода и сообщите нам, какой парсер вы используете для сериализации.   -  person Kinimod    schedule 28.03.2019
comment
Пробелы в JSON не имеют значения, поэтому независимо от того, печатается ли вложенный массив в одну строку или в несколько строк, с точки зрения анализатора/записи JSON остается тем же JSON. Просто напишите JSON как обычно. Вам просто нужен собственный способ распечатать ваш JSON.   -  person Sweeper    schedule 28.03.2019
comment
По умолчанию json отображается с разрывом строки каждого подмассива и ячеек на новую в следующих строках. Можно ли убрать дефисы для определенного свойства (Координаты)?   -  person DonilZ    schedule 28.03.2019


Ответы (1)


кажется, ваш второй случай содержит свойство Coordinates как сериализованную строку.

почему не следует использовать var string = JsonConvert.SerializeObject(YourObject) ?

Но вы должны установить https://www.nuget.org/packages/Newtonsoft.Json/< /а> первый

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

person Oleg Bondarenko    schedule 28.03.2019
comment
Как ваше свойство Coordinates представлено в классе С#? Список‹Список‹Список‹Int››› ? - person Oleg Bondarenko; 28.03.2019
comment
Да, Список‹Список‹Список‹двойной››› - person DonilZ; 28.03.2019
comment
JsonConvert.SerializeObject(YourObject) возвращает желаемый результат, или я что-то пропустил? - person Oleg Bondarenko; 28.03.2019
comment
Так что он пишет json вообще без переносов строк. Я постараюсь в этом случае добавить разрывы строк везде, кроме Координатов. - person DonilZ; 28.03.2019
comment
есть моя результирующая строка {id:null,data:[[[10.0,11.0]]]} без разрывов строк. - person Oleg Bondarenko; 28.03.2019
comment
Ах, я думаю, вы имели в виду двойные кавычки вместо разрывов строк. Для строковых свойств это всегда значение в двойных кавычках в результате строки json. Например, для числовых типов это вообще без кавычек и то же самое для массивов. - person Oleg Bondarenko; 28.03.2019
comment
Я хочу убедиться, что в значении свойства Coordinates нет кавычек (поскольку это массив) и нет разрывов строк между подмассивами. Например: Координаты: [[[1,2],[3,4]],[[5,6],[7,8]]]. Но по умолчанию json разделяет подмассивы разрывами строк. Это можно исправить преобразованием значения свойства Coordinates в строку, НО можно ли это исправить другим способом без преобразования в строку? - person DonilZ; 28.03.2019
comment
Я не видел разрывов строк в строке json {Test:null,Data:[[[10.0,11.0],[14.0,17.0]]]}. Но хорошо, вы можете преобразовать массив координат в строку и после этого десериализовать основной объект, а также вручную десериализовать свойство координат. Но не могли бы вы объяснить мне, как вы получили разрывы строк между подмассивами? - person Oleg Bondarenko; 28.03.2019
comment
Когда я написал объект, сериализованный в json: Console.WriteLine(obj.ToJson()); (код функции ToJson() указан в вопросе). Все свойства и подсвойства автоматически разделяются разрывами строк. Но я вас понимаю, я постараюсь сделать, как вы сказали, спасибо. - person DonilZ; 28.03.2019
comment
Я понял, что вы используете другой JsonSerializer, не могли бы вы использовать вместо него Newtonsoft.Json? он работает без лишних разрывов строк и прочего. Также вы можете попробовать использовать Console.WriteLine(obj.ToJson().toString()) - person Oleg Bondarenko; 28.03.2019
comment
Потому что ваша консоль приложения показывает не строку, а значение JToken - person Oleg Bondarenko; 28.03.2019