teledexterus Ответов: 1

Как преобразовать JSON в XML с помощью LINQ


Я пытаюсь преобразовать JSON в XML с помощью LINQ. Я не хочу использовать NewtonSoft jso.net.
var serializer = new JavaScriptSerializer();
            var json1 = "['count':['place':{'first':'1','second':'2','third':'3'}],['place':{'first':'11','second':'22','third':'33'}],['place':{'first':'111','second':'222','third':'333'}]]]}";
            var jsons = serializer.Serialize(json1);
            var jsona = serializer.Deserialize<List<jClass>>(jsons);
            var xmld = new XDocument(
                new XElement("count",  jsona.Select(c => c)
               .SelectMany(p => p.place)
               .Select(x =>
                   new XElement("place",
                        new XElement("first", x.first),
                        new XElement("second", x.second),
                        new XElement("third", x.third)
                    )
                ))
            );

Класс. cs
public class  jClass
    {
        public jCount[] count { get; set; }
    }
    public class jCount
    {
        public jPlace[] place { get; set; }
    }
    public class jPlace
    {
        public int first { get; set; }
        public int second { get; set; }
        public int third { get; set; }
    }

Должно выглядеть так:
<count>
  <place>
    <first>1</first>
    <second>2</second>
    <third>3</third>
  </place>
  <place>
    <first>11</first>
    <second>22</second>
    <third>33</third>
  </place>
  <place>
    <first>111</first>
    <second>222</second>
    <third>333</third>
  </place>
</count>


Что я уже пробовал:

Я пробовал много разных Linq для преобразования json в xml. Ошибка находится на "p. place".

1 Ответов

Рейтинг:
9

Richard Deeming

Цитата:
джсона.Выберите (c => c)

Это должно быть:
jsona.SelectMany(c => c.count)


teledexterus

Теперь jsona выдает ошибку: "var jsona = serializer.Десериализовать в<список<jclass&ГТ;&ГТ;(jsons);" может ли быть, что "сериализатор.Сериализатор " перед ним или json1 является источником ошибки.

Richard Deeming

Да - так и должно быть:

var jsona = serializer.Deserialize<List<jClass>>(json1);
Вы можете избавиться от serializer.Serialize строка, так как нет смысла сериализовывать уже сериализованную строку.

teledexterus

Это правильная форма? var json1 = "['count':['place':{'first':'1','second':'2','third':'3'}],['place':{'first':'11','second':'22','third':'33'}],['place':{'first':'111','second':'222','third':'333'}]]";

Richard Deeming

Нет, это не действительный JSON.

Это должно выглядеть примерно так:

[{"count":[{"place":[{"first":1,"second":2,"third":3},{"first":11,"second":22,"third":33},{"first":111,"second":222,"third":333}]}]}]


Или это:
[{"count":[{"place":[{"first":1,"second":2,"third":3}]},{"place":[{"first":11,"second":22,"third":33}]},{"place":[{"first":111,"second":222,"third":333}]}]}]


Или даже это:
[{"count":[{"place":[{"first":1,"second":2,"third":3}]}]},{"count":[{"place":[{"first":11,"second":22,"third":33}]}]},{"count":[{"place":[{"first":111,"second":222,"third":333}]}]}]