C# 如何动态更改XmlElement名称?
这是根元素,我正在工作。我无法动态更改愚人主义者的“XmlElement”值。类中可以有多个元素。如何动态地更改它们的XmlElement值 您需要以正确的方式使用XMLAttributeOverrides。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
代码的工作版本在这里
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>