Как преобразовать список в json с помощью c#

Мне нужно преобразовать сообщения очереди хранилища, как показано в следующем примере, в json.

DeviceId: "a4592037"
DeviceName: "device3"
FirmwareVersion: "0.1.23"
MfgDate: "01/02/208"
Level: "normal"
DeviceUptime: "323234"

У кого-нибудь есть предложение?

Что вы пробовали до сих пор?

Tobias 26.10.2018 07:44

@Tobias Я знаю, что это легко сделать с помощью Javascript. К сожалению, я не могу его использовать, так как у меня есть несколько настраиваемых модулей C#, на которые мне нужно ссылаться. Я испробовал большинство операций из Newtonsoft. Я собираюсь установить динамический текст очереди и создать объект.

Howard Edidin 26.10.2018 18:10
2
2
59
2

Ответы 2

Попробуйте библиотеку JSON от Newtonsoft. При этом вы можете просто использовать:

JsonConvert.SerializeObject(YourObject)

Подробности по адресу: https://www.newtonsoft.com/json

ПРИМЕЧАНИЕ. Данные, предоставленные пользователем, представлены в виде простого текста, а не объектной модели, и поэтому будут возвращать символы новой строки. Чтобы бороться с этим:

string convertMeDaddy = JsonConvert.SerializeObject(YourObject) convertMeDaddy = convertMeDaddy.replace(System.Environment.NewLine, "");

(выше указано, если он использует индикатор новой строки, в противном случае измените system.enviroment.newline на "\\ r \ n"

Я попробовал. "DeviceId: \" a4592037 \ "\ r \ nИмя устройства: \" device3 \ "\ r \ nВерсия прошивки: \" 0.1.23 \ "\ r \ nMfgDate: \" 01/02/208 \ "\ r \ nУровень: \ "нормальный \" \ r \ nВремя работы устройства: \ "323234 \" "

Howard Edidin 26.10.2018 05:48

Похоже, это указывает на то, что вы можете использовать фреймворк поверх, который, возможно, сортирует сообщения. Можете ли вы добавить переопределение форматирования в JsonConvert и проверить вывод: JsonConvert.SerializeObject (YourObject, Formatting.None);

Rando 26.10.2018 05:58

Я добавил форматтер; "DeviceId: \" a4592037 \ "\ r \ nИмя устройства: \" device3 \ "\ r \ nВерсия прошивки: \" 0.1.23 \ "\ r \ nMfgDate: \" 01/02/208 \ "\ r \ nУровень: \ "нормальный \" \ r \ nDeviceUptime: \ "323233 \" "

Howard Edidin 26.10.2018 06:05

В каком типе приложения вы его создаете (webAPI, .Net и т. д.) И как вы отправляете объект любому контроллеру, обрабатывающему данные (отправка данных из представления, отправка через jquery и т. д.)

Rando 26.10.2018 06:09

приложение-функция, использующее триггер очереди

Howard Edidin 26.10.2018 06:09

Построен на любой платформе или на прямом C# (WebAPI пытается анализировать сам json, как и некоторые библиотеки jquery). В значительной степени токены \ r \ n означают, что ваш объект был проанализирован в какой-то момент, что означает, что при сериализации выполняется повторный анализ и добавление разрывов строк. Технически вы можете запустить string.replace для \ r \ n, но лучше разобраться в проблеме.

Rando 26.10.2018 06:12

Еще один вариант: можете ли вы проверить вывод строки meOlJson = JsonConvert.SerializeObject (YourObject); строка test = meOlJson.ToString (Formatting.None); console.log (тест);

Rando 26.10.2018 06:16

Я согласен. Следующий шаг - преобразовать json в байтовый массив.

Howard Edidin 26.10.2018 06:16

такое же возвращаемое значение

Howard Edidin 26.10.2018 06:24

невозможно преобразовать из Newtonsoft.Json.Formatting в System.IFormatProvider

Howard Edidin 26.10.2018 06:25

Затем боитесь, что если вы не найдете, какое действие выполняет предварительную сериализацию ваших данных, следующим лучшим вариантом будет выполнить новую сериализацию, а затем заменить строку. Если вы просто взяли свой объект и выполнили .ToString (); каков результат этого (т.е. YourObject.ToString ();)

Rando 26.10.2018 06:26

Сообщение очереди хранилища Azure представляет собой обычный текст. В приведенном выше примере показано сообщение. Это не объект.

Howard Edidin 26.10.2018 06:28

АААА, это на самом деле все меняет. Извините, я думал, что ваши данные - это объект модели, а не простой текст. В этом случае вас ждет немного кошмар. (stackoverflow.com/questions/25284778/…) ИЛИ (stackoverflow.com/questions/33986986/…)

Rando 26.10.2018 06:31

функция обработала запрос. DeviceId: «a4592037» DeviceName: «device3» FirmwareVersion: «0.1.23» MfgDate: «01/02/208» Уровень: «нормальный» DeviceUptime: «323233»

Howard Edidin 26.10.2018 06:31

Должен быть на C#. Это для POC

Howard Edidin 26.10.2018 06:32

Это был индикатор того, что вам нужно сделать, просто потому, что это простой текст. данные, подобные этим в C#, если бы это была модель, сразу обрабатывались бы любым количеством классов преобразования json. Поскольку это простой текст, вам нужно создать функцию для преобразования вашего обычного текста в режим, который может быть принят. Итак, в этой ситуации создайте новую функцию самостоятельно, ИЛИ используйте jsonconvert, как в моем ответе, затем запустите string.replace в результате, я обновлю свой ответ, чтобы показать

Rando 26.10.2018 06:34

Я собираюсь сделать строку динамической и создать объект.

Howard Edidin 26.10.2018 18:15

var temp = JsonConvert.DeserializeObject <dynamic> (myQueueItem); var device = new Devices {DeviceId = temp.DeviceId, DeviceName = temp.DeviceName, DeviceUptime = temp.DeviceUptime, FirmwareVersion = temp.FirmwareVersion, Level = temp.Level, MfgDate = temp.MfgDate}; var data = JsonConvert.SerializeObject (устройство);

Howard Edidin 26.10.2018 18:36

Думаю, это сработает:

var temp = JsonConvert.DeserializeObject<dynamic>(myQueueItem);

var device = new Devices
    {
    DeviceId = temp.DeviceId,
    DeviceName = temp.DeviceName,
    DeviceUptime = temp.DeviceUptime,
    FirmwareVersion = temp.FirmwareVersion,
    Level = temp.Level,
    MfgDate = temp.MfgDate
    };

 var data = JsonConvert.SerializeObject(device);

Другие вопросы по теме