отформатировать вывод XML - PullRequest
       22

отформатировать вывод XML

1 голос
/ 16 октября 2011

Я использую этот метод для преобразования объекта в XML:

protected XmlDocument SerializeAnObject(object obj)
{
    XmlDocument doc = new XmlDocument();
    DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
    MemoryStream stream = new MemoryStream();
    try
    {
        serializer.WriteObject(stream, obj);
        stream.Position = 0;
        doc.Load(stream);
        return doc;
    }
    finally
    {
        stream.Close();
        stream.Dispose();
    }
}

В конце концов я получаю что-то вроде:

<CaCT>
  <CTC i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/a.b.BusinessEntities.InnerEntities" /> 
  <CTDescr xmlns="http://schemas.datacontract.org/2004/07/a.b.BusinessEntities.InnerEntities">blabla</CTDescr> 
  <CaId>464</CaId> 
  </CaCT>

Как мне избавиться от i:nil="true" иxmlns="http://schemas.datacontract.org/2004/07/a.b.BusinessEntities.InnerEntities"?

Ответы [ 2 ]

2 голосов
/ 16 октября 2011
protected string SerializeAnObject(object obj)
{
    XmlSerializerNamespaces xmlNamespaces = new XmlSerializerNamespaces();
    xmlNamespaces.Add("", "");

    XmlWriterSettings writerSettings = new XmlWriterSettings();
    writerSettings.OmitXmlDeclaration = true;

    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        using (XmlWriter stream = XmlWriter.Create(ms, writerSettings))
        {
            serializer.Serialize(stream, obj, xmlNamespaces);
            return Encoding.UTF8.GetString(ms.ToArray());
        }
    }
}
2 голосов
/ 16 октября 2011

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

Очевидно, этоЧем сложнее ваши классы, тем сложнее, но я обнаружил, что это очень хорошо работает для простых классов.Это как минимум альтернатива для рассмотрения.

...