11
votes

Comment modifier le nom de l'élément racine tout en gardant le contenu à l'aide de XMLSerializer?

J'ai un document XML:

<dataNew>
    <elmt1>Element 1</elmt1>
    <elmnt2>Element 2</elmnt2>
    <elmnt3>Element 3</elmnt3>
</dataNew>


0 commentaires

6 Réponses :


13
votes

xmlrootationtattribute était censé fonctionner xxx

édition: terminé le XML


0 commentaires


6
votes

1 commentaires

Tu dois juste aimer tous ces goodies que vous trouvez dans le cadre en surfant sur ce site.



4
votes

Un échantillon d'utilisation de xmlattributeoverrides. Si vous avez voté, donnez-en un à HJB417 aussi bien

class Program
{
    static void Main(string[] args)
    {
        using (var fs = File.OpenRead("XmlFile1.xml"))
        using (var fs2 = File.OpenRead("XmlFile2.xml"))
        {
            var xSer = new XmlSerializer(typeof(data));
            var obj = xSer.Deserialize(fs);
        //
            var xattribs = new XmlAttributes();
            var xroot = new XmlRootAttribute("dataNew");
            xattribs.XmlRoot = xroot;
            var xoverrides = new XmlAttributeOverrides();
            xoverrides.Add(typeof(data), xattribs);
            var xSer2 = new XmlSerializer(typeof(data), xoverrides);
            var obj2 = xSer2.Deserialize(fs2);
        }
    }
}

public class data
{
    public string elmt1 { get; set; }
    public string elmnt2 { get; set; }
    public string elmnt3 { get; set; }
}


2 commentaires

Merci Mathew mais mon défi consiste à désérialiser à Object Datanew. Donc, dans votre code, le fichier XML sera le même, mais la logique de sérialisation doit effectuer quelque chose comme ci-dessous var XSER2 = nouveau XMLSerializer (typeOf (Datanew)); var obj2 = xser2.desérialize (FS1);


Dans ce cas, vous remplaceriez le xmlrootatattribute ("Datanew") avec "DataNew" et le typeOf (Data) serait TYPEOF (Datanew)



16
votes

Si ce n'est que le nom de racine que vous souhaitez modifier, vous pouvez spécifier l'attribut root lors de la déclaration du XMLSerializer. xxx


0 commentaires

1
votes

Vous pouvez utiliser ExtendexmlSerializer . Ce support de sérieliseur modifie le nom d'élément racine et le nom de la propriété. Si vous avez une classe comme celle-ci:

<?xml version="1.0" encoding="utf-8"?>
<dataNew type="Models.Example">
    <elmt1>A</elmt1>
    <elmnt2>B</elmnt2>
    <elmtn3>C</elmtn3>
</dataNew>
  • désérialisation XML de XMLSerializer standard LI>
  • classe de sérialisation avec interface de propriété li>
  • Référence circulaire et identifiant de référence sur la circulaire li>
  • désérialisation de la vieille version de XML li>
  • Cryptage de la propriété LI>
  • Serializer personnalisé Li> ul>

    ExtendedxmlSerializer prend en charge .NET 4.5 et .NET CORE. Vous pouvez l'intégrer avec webapi et aspcore. p> p>


0 commentaires