Showing posts with label XML. Show all posts
Showing posts with label XML. Show all posts

c# XML Creating class for serialization

What do we want

How to do

    public class wo_ids
    {
        [System.Xml.Serialization.XmlElementAttribute("id")]
        public string[] id {get;set;}
    }

Генерируем классы,xsd по xml и в обратную сторону

Генерируем класс по xsd
 xsd /c /language:CS XSDSchemaFile.xsd

Генерируем xsd по xml
xsd file.xml /outputdir:c:\temp\

В xsd.exe есть баг с массивами.Решение по ссылкам ниже

http://stackoverflow.com/questions/6678934/unable-to-generate-a-temporary-class-result-1-error-cs0030-cannot-convert-ty
Ниже как по мне неверный совет,но пусть лежит ссылка
http://satov.blogspot.ru/2006/12/xsdexe-generated-classes-causing.html

c# Получить и десериализовать xml по ссылке

//UpdateInfo updinfo = (UpdateInfo)DeserializeFromFile("http://mysite.ru/files/UpdateInfo.xml");
 
public static object DeserializeFromFile(string path)
{
  var serializer = new XmlSerializer(typeof(UpdateTerminalInfo));
 
  using (XmlReader reader = XmlReader.Create(path))
  {
    return serializer.Deserialize(reader);
  }
}

c# How to read/write xml data from MSSQL

//SELECT [xml_data] FROM [MyDB]
 
using (SqlDataReader reader = cmd.ExecuteReader())
{
  while (reader.Read())
  {
    var xdoc = new XmlDocument();
    xdoc.Load(reader.GetSqlXml(0).CreateReader());
  }
}

public static void InsertXML(string xmlstring)
{
            string Qry = string.Format("INSERT INTO [dbo].[my_table] ([xml_data]) values('{0}')", xmlstring);
            using (SqlConnection cnn = new SqlConnection())
            using (SqlCommand cmd = new SqlCommand(Qry, cnn))
            {
                try
                {
                    cnn.ConnectionString = "Data Source=10.10.0.10;Initial Catalog=MYDB;User ID=user;Password=pass";
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
 
                catch (Exception ex)
                {
                    throw ex;
                }
            }
}

c# проверяем xml по xsd схеме

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class Sample {

  public static void Main() {

    XmlSchemaSet sc = new XmlSchemaSet();
    sc.Add("", "books.xsd");
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);
    while (reader.Read());

  }

  private static void ValidationCallBack(object sender, ValidationEventArgs e) {
    Console.WriteLine("Validation Error: {0}", e.Message);
  }
}

с# Serialization to file or string / с# Сериализация в файл или в строку + Десериализация

static void SerializeToFile(object o)
{
  XmlSerializer serializer = new XmlSerializer(o.GetType());
  using (Stream writer = new FileStream("output.xml", FileMode.Create))
  {
    serializer.Serialize(writer, o);
  }
}

public static string SerializeToString(object obj)
        {
            XmlSerializer serializer = new XmlSerializer(obj.GetType());

            using (StringWriter writer = new StringWriter())
            {
                serializer.Serialize(writer, obj);

                return writer.ToString();
            }
        }
public static object DeserializeFromFile(object obj,string path)
{
  XmlSerializer serializer = new XmlSerializer(obj.GetType());
 
  using (XmlReader reader = XmlReader.Create(path))
  {
    object o = serializer.Deserialize(reader);
  }
}

//From string

var serializer = new XmlSerializer(typeof(Car));
using (var reader = new StringReader(xml))
{
    var car = (Car)serializer.Deserialize(reader);
}