C# 如何动态更改XmlElement名称?

C# 如何动态更改XmlElement名称?,c#,serialization,xml-serialization,C#,Serialization,Xml Serialization,这是根元素,我正在工作。我无法动态更改愚人主义者的“XmlElement”值。类中可以有多个元素。如何动态地更改它们的XmlElement值 您需要以正确的方式使用XMLAttributeOverrides。 代码的工作版本在这里 public class Foos { [XmlElement("A1")] public List<Foo> FooList{ get; set; } } var serializer = new X

这是根元素,我正在工作。我无法动态更改愚人主义者的“XmlElement”值。类中可以有多个元素。如何动态地更改它们的XmlElement值

您需要以正确的方式使用XMLAttributeOverrides。

代码的工作版本在这里

    public class Foos
    {
       [XmlElement("A1")]
       public List<Foo> FooList{ get; set; }
    }
var serializer = new XmlSerializer(typeof(Foos),new XmlRootAttribute(ConfigurationManager.AppSettings[someValue]));
公共类Foos
{       
公共列表傻瓜{get;set;}
}
公开课Foo
{
公共字符串名称{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var xmlAttributeForFoos=new XmlAttributes{XmlRoot=new XmlRootAttribute(ConfigurationManager.AppSettings[“someFoosValue”]),XmlType=new XmlTypeAttribute(ConfigurationManager.AppSettings[“someFoosValue”]);
var XmlAttributeForFoolList=新的XmlAttributes();
var xmlAttributeForFoo=新的XmlAttributes();
添加(新的XmlElementAttribute(ConfigurationManager.AppSettings[“someFooValue”]);
添加(新的XmlElementAttribute(ConfigurationManager.AppSettings[“someFoodNameValue”]);
var overrides=new XmlAttributeOverrides();
Add(typeof(Foos),xmlAttributeForFoos);
Add(typeof(Foos),“傻瓜主义者”,xmlAttributeForFooList);
Add(typeof(Foo),“Name”,xmlAttributeForFoo);
XmlSerializer serializer=新的XmlSerializer(typeof(Foos),重写);
var foos=新foos
{
傻瓜=新列表
{
新建Foo{Name=“FooName”}
}
};
使用(var stream=File.Open(“File.xml”,FileMode.OpenOrCreate))
{
序列化(流,foos);
}
}
}
应用程序设置

public class Foos
{       
    public List<Foo> FooList { get; set; }
}


public class Foo
{
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var xmlAttributeForFoos = new XmlAttributes { XmlRoot = new XmlRootAttribute(ConfigurationManager.AppSettings["someFoosValue"]), XmlType = new XmlTypeAttribute(ConfigurationManager.AppSettings["someFoosValue"]) };
        var xmlAttributeForFooList = new XmlAttributes();
        var xmlAttributeForFoo = new XmlAttributes();

        xmlAttributeForFooList.XmlElements.Add(new XmlElementAttribute(ConfigurationManager.AppSettings["someFooValue"]));
        xmlAttributeForFoo.XmlElements.Add(new XmlElementAttribute(ConfigurationManager.AppSettings["someFooNameValue"]));

         var overrides = new XmlAttributeOverrides();
        overrides.Add(typeof(Foos), xmlAttributeForFoos);
        overrides.Add(typeof(Foos), "FooList", xmlAttributeForFooList);
        overrides.Add(typeof(Foo), "Name", xmlAttributeForFoo);

        XmlSerializer serializer = new XmlSerializer(typeof(Foos), overrides);

        var foos = new Foos
        {
            FooList = new List<Foo>
            {
                new Foo{Name = "FooName"}
            }
        };

        using (var stream = File.Open("file.xml", FileMode.OpenOrCreate))
        {
            serializer.Serialize(stream, foos);
        }
    }
}

输出

<appSettings>
  <add key="someFoosValue" value="SomeFoos"/>    
  <add key="someFooValue" value="SomeFoo"/>
  <add key="someFooNameValue" value="FooName"/>
</appSettings>

食物名

@BassemAkl仅用于根元素。这是我写的。“这是工作只是根元素”。但我想要内部类元素。我的错误。我记下了我的评论。我发现这篇文章很有帮助:非常感谢。@MuhammetCanTONBUL,我完全按照你的要求修改了代码。我想你已经找到了解决办法,但最好还是保持这样。最后一个问题:)。如果我想添加
[xmlement(someValue)]
公共字符串名{get;set;}
动态是否可行@nmkaya@MuhammetCanTONBUL,我更新了代码,请检查。
<appSettings>
  <add key="someFoosValue" value="SomeFoos"/>    
  <add key="someFooValue" value="SomeFoo"/>
  <add key="someFooNameValue" value="FooName"/>
</appSettings>
<SomeFoos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SomeFoo>
    <FooName>FooName</FooName>
  </SomeFoo>
</SomeFoos>