C# Конвертирование JSON в XML & XML в JSON

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Всем привет!

Есть задача по конвертированию товарных матриц из JSON в XML и обратно.

На просторах сети много вариантов, но что-то не получается все это завести в зенке.
Не всегда понятно какая нужна библиотека, где ее взять и как воткнуть в зенку.

Вот нашел, пару примеров, но не получается запустить:

1. Используется класс JsonConvert
Преобразование между JSON и XML с помощью Json.NET:
// To convert an XML node contained in string xml into a JSON string   
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

// To convert JSON text contained in string json into an XML node
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);
2. .NET Framework
C#:
// JSON в XML: с помощью System.Runtime.Serialization.Json
var xml = XDocument.Load(JsonReaderWriterFactory.CreateJsonReader(
    Encoding.ASCII.GetBytes(jsonString), new XmlDictionaryReaderQuotas()));

// XML в JSON: с помощью System.Web.Script.Serialization
var json = new JavaScriptSerializer().Serialize(GetXmlData(XElement.Parse(xmlString)));

private static Dictionary<string, object> GetXmlData(XElement xml)
{
    var attr = xml.Attributes().ToDictionary(d => d.Name.LocalName, d => (object)d.Value);
    if (xml.HasElements) attr.Add("_value", xml.Elements().Select(e => GetXmlData(e)));
    else if (!xml.IsEmpty) attr.Add("_value", xml.Value);

    return new Dictionary<string, object> { { xml.Name.LocalName, attr } };
}
Подскажите плиз, кто знает, как реализовать?!
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 161
Благодарностей
743
Баллы
113
Преобразование между JSON и XML с помощью Json.NET:
// To convert an XML node contained in string xml into a JSON string
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

// To convert JSON text contained in string json into an XML node
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);
Это рабочий пример. Вчера ток такой же использовал. В чем сложность?
 
  • Спасибо
Реакции: Severip

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Компиляция кода Ошибка в действии "CS0246" "Не удалось найти имя типа или пространства имен "XmlDocument" (пропущена директива using или ссылка на сборку?)".

и

Компиляция кода Ошибка в действии "CS0103" "Имя "JsonConvert" отсутствует в текущем контексте".
 

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Не получается побороть...

C#:
string json = project.Variables["json"].Value.Trim();
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);
return doc;
Кто подскажет, что сделать, чтобы запустить код?
 
Последнее редактирование:

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 161
Благодарностей
743
Баллы
113
В папку ExternalAssemblies надо закинуть библиотеку Newtonsoft.Json.dll и добавить ее в GAS. Так же добавить в GAS System.xml 4.0.0.0
Step1.png step2.png
В общем коде прописать юзинги
2020-02-05_12-22-47.png
 
  • Спасибо
Реакции: Sanekk, Severip и Koqpe

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Библиотеку подключил, но нашел только версию .dll для 32
На выходе ошибок нет, но выдает через return:
"System.Xml.XmlDocument"
и все.

Через онлайн конвертер JSON в XML конвертится нормально.

Что может быть не так? Как вывести результат?
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 161
Благодарностей
743
Баллы
113
C#:
return doc.OuterXml;
 
  • Спасибо
Реакции: Severip

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 161
Благодарностей
743
Баллы
113
  • Спасибо
Реакции: Severip

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Oleg1987, спасибо! Получилось.
Правда осталась одна проблема, все пробелы и другие спецсимволы заменяет на их код, типа: _x0020_
Как это можно победить? Это не в библиотеке случаем дело?

не совсем понял о чем это, но на будущее - https://www.nuget.org/ - тут есть 98% существующих библиотек под .net
Там тоже смотрел, но как раз из-за того что там "98% существующих библиотек под .net" оно не понятно что именно нужно и где оно лежит.
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 161
Благодарностей
743
Баллы
113
  • Спасибо
Реакции: Severip

Severip

Client
Регистрация
17.10.2013
Сообщения
346
Благодарностей
98
Баллы
28
Все ок, это просто ключи в json были на кириллице со спецсимволами, заменил ключи на латиницу и все стало ок.
Oleg1987, еще раз спасибо за помощь!!!

По библиотеке тоже разобрался.
Чтобы скачать ее с nuget.org, надо перейти по ссылке, например:
Полученный файл newtonsoft.json.7.0.1.nupkg - это zip-архив. Например, в Windows Explorer его можно переименовать, заменить .nupkg на .zip, и открыть.
В \lib находятся \net20, \net35, и т.д.
Если для проекта требуется сборка для .NET 4.5, то в \net45 находится соответствующий файл Newtonsoft.Json.dll

Профит!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)