четверг, 23 января 2014 г.

Преобразование JSON и XML в объекты c#

Преобразование строки Json в объект c#

К примеру имеем такой Json :
var jsonStr=@"{
    "one": "value",
    "two": [
        [
            "123",
            "325",
            "string",
            "0.10"
        ],
        [
            "k",
            "1.0",
            "20.04.2004",
            ""
        ]
    ],
    "three": [
        "29",
        "1.0",
        "13.10.2000",
        ""
    ]
}";

Чтобы преобразовать его в объект c# подключаем пространство имен System.Web.Script.Serialization;

Затем создаем класс, описывающий наш объект. В Visual Studio 2012 есть возможность вставить JSON - код как класс, достаточно лишь поместить нужный экземпляр в буфер обмена (скопировать) и в студии нажать Edit - Paste special - Paste JSON as Classes (Правка - Специальная вставка - Вставить JSON как классы):
public class Test
        {
            public string one {get;set;}
            public List<List<string>> two{ get; set; }
            public List<string> three{ get; set; }
        }
И получаем результат двумя строчками:
 var jss = new JavaScriptSerializer();
 var result = jss.Deserialize<Test>(jsonStr));
Кстати, JSONLint - отличный способ проверить и отформатировать ваш Json.


Преобразование строки XML в объект c# 

Имеем такой XML:
var xmlStr=@"<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <One>value</One>
   <Three>
      <element>29</element>
      <element>1.0</element>
      <element>13.10.2000</element>
      <element />
   </Three>
   <Two>
      <element>
         <element>123</element>
         <element>325</element>
         <element>string</element>
         <element>0.10</element>
      </element>
      <element>
         <element>k</element>
         <element>1.0</element>
         <element>20.04.2004</element>
         <element />
      </element>
   </Two>
</Root>";

В Visual Studio 2012 есть возможность вставить XML код как класс, достаточно лишь поместить нужный экземпляр в буфер обмена (скопировать) и в студии нажать Edit - Paste special - Paste XML as Classes (Правка - Специальная вставка - Вставить XML как классы). Проверить свой XML-код можно тут.

Получили следующий класс:
    [XmlTypeAttribute(AnonymousType = true)]
    [XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class Root
    {
        public string One { get; set; }
        [XmlArrayItemAttribute("element", IsNullable = false)]
        public string[] Three { get; set; }
        [XmlArrayItemAttribute("element", IsNullable = false),
XmlArrayItemAttribute("element", IsNullable = false, NestingLevel = 1)]
        public string[][] Two { get; set; }
    }
Преобразовать эту строку XML в объект c# теперь можно, используя следующую функцию:
 public static Root DeserializeFromXML(string xmlStr)
        {
            private var result = "";
            var deserializer = new XmlSerializer(typeof(Root));
            using (var reader = new StringReader(xmlStr))
                result = (Root)deserializer.Deserialize(reader);
         
            return result;
        }
      

Комментариев нет:

Отправить комментарий