J'ai un document XML:
<dataNew> <elmt1>Element 1</elmt1> <elmnt2>Element 2</elmnt2> <elmnt3>Element 3</elmnt3> </dataNew>
6 Réponses :
xmlrootationtattribute était censé fonctionner édition: terminé le XML P> P>
Vous devrez peut-être avoir à implémenter iserialisable a > et changer l'élément racine dans getObjectData a> (). p>
Avez-vous essayé d'utiliser l'utilisation du xmlattributeverrides classe? p>
Tu dois juste aimer tous ces goodies que vous trouvez dans le cadre en surfant sur ce site.
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; } }
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)
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.
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>
ExtendedxmlSerializer prend en charge .NET 4.5 et .NET CORE. Vous pouvez l'intégrer avec webapi et aspcore. p> p>