2011-08-17 2 views
1

Я хотел бы использовать JsonFx для преобразования XML в/из пользовательских типов и запросов LINQ. Может ли кто-нибудь повторить пример де-сериализации и сериализации?C# de-serialise Xml для объекта и сериализации обратно в Xml снова

Вот пример XML, с которым я работаю. XML, вставленный здесь: http://pastebin.com/wURiaJM2

JsonFx Поддерживает несколько стратегий привязки json к объектам .net, включая динамические объекты. https://github.com/jsonfx/jsonfx

Сердечные приветы Si

PS Я попытался вставить XML-документ в StackOverflow, но он снял много документов, цитат и декларации XML.

+0

Атрибуты XML определены здесь http://www.getharvest.com/api/projects – Simon

ответ

1

Это метод, который я использовал. Это может потребоваться некоторые настройки:

public static string SerializeObject<T>(T item, string rootName, Encoding encoding) 
    { 

     XmlWriterSettings writerSettings = new XmlWriterSettings(); 
     writerSettings.OmitXmlDeclaration = true; 
     writerSettings.Indent = true; 
     writerSettings.NewLineHandling = NewLineHandling.Entitize; 
     writerSettings.IndentChars = " "; 
     writerSettings.Encoding = encoding; 

     StringWriter stringWriter = new StringWriter(); 

     using (XmlWriter xml = XmlWriter.Create(stringWriter, writerSettings)) 
     { 

      XmlAttributeOverrides aor = null; 

      if (rootName != null) 
      { 
       XmlAttributes att = new XmlAttributes(); 
       att.XmlRoot = new XmlRootAttribute(rootName); 

       aor = new XmlAttributeOverrides(); 
       aor.Add(typeof(T), att); 
      } 

      XmlSerializer xs = new XmlSerializer(typeof(T), aor); 

      XmlSerializerNamespaces xNs = new XmlSerializerNamespaces(); 
      xNs.Add("", ""); 

      xs.Serialize(xml, item, xNs); 
     } 

     return stringWriter.ToString(); 
    } 

И для десериализации:

public static T DeserializeObject<T>(string xml) 
    { 
     using (StringReader rdr = new StringReader(xml)) 
     { 
      return (T)new XmlSerializer(typeof(T)).Deserialize(rdr); 
     } 
    } 

И называть это так:

string xmlString = Serialization.SerializeObject(instance, "Root", Encoding.UTF8); 

ObjectType obj = Serialization.DeserializeObject<ObjectType>(xmlString); 

Надеется, что это помогает. Параметр rootName в методе Serialize позволяет настроить значение корневого узла в полученной строке xml. Кроме того, ваши классы должны быть украшены соответствующими атрибутами Xml, которые будут контролировать, как сущность сериализуется.

+0

Спасибо за отзыв, он действительно начал меня с использования только функций standard.net, а не чьи-то рамки – Simon

0

В этом сообщении объясняется, как создать XSD и классы из XML-файла, а затем охватывает сериализацию и де-сериализацию. http://geekswithblogs.net/CWeeks/archive/2008/03/11/120465.aspx

Используя эту технику с XSD.exe для создания XSD, а затем классов в CS-файле, я смог снова сериализоваться и затем де-сериализоваться.

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

 Смежные вопросы

  • Нет связанных вопросов^_^