Sar*_*els 48 c# xml xml-serialization serializable xml-deserialization
我想要XML格式如下:
<configuration><!-- Only one configuration node -->
<logging>...</logging><!-- Only one logging node -->
<credentials>...</credentials><!-- One or more credentials nodes -->
<credentials>...</credentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个Configuration
具有该[Serializable]
属性的类.要序列化凭据节点,我有以下内容:
[XmlArray("configuration")]
[XmlArrayItem("credentials", typeof(CredentialsSection))]
public List<CredentialsSection> Credentials { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,当我将其序列化为XML时,XML的格式如下:
<configuration>
<logging>...</logging>
<configuration><!-- Don't want credentials nodes nested in a second
configuration node -->
<credentials>...</credentials>
<credentials>...</credentials>
</configuration>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如果我删除该[XmlArray("configuration")]
行,我会得到以下内容:
<configuration>
<logging>...</logging>
<Credentials><!-- Don't want credentials nodes nested in Credentials node -->
<credentials>...</credentials>
<credentials>...</credentials>
</Credentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如何<credentials>
在单根节点中使用多个节点以我想要的方式对其进行序列化<configuration>
?我想这样做而不必实现IXmlSerializable
和执行自定义序列化.这是我的课程描述的方式:
[Serializable]
[XmlRoot("configuration")]
public class Configuration : IEquatable<Configuration>
Run Code Online (Sandbox Code Playgroud)
Mik*_*son 75
以下应按您希望的方式正确序列化.[XmlElement("credentials")]
列表中的线索.我通过获取xml,在Visual Studio中从中生成模式(xsd)来完成此操作.然后在架构上运行xsd.exe以生成类.(还有一些小编辑)
public class CredentialsSection
{
public string Username { get; set; }
public string Password { get; set; }
}
[XmlRoot(Namespace = "", IsNullable = false)]
public class configuration
{
/// <remarks/>
public string logging { get; set; }
/// <remarks/>
[XmlElement("credentials")]
public List<CredentialsSection> credentials { get; set; }
public string Serialize()
{
var credentialsSection = new CredentialsSection {Username = "a", Password = "b"};
this.credentials = new List<CredentialsSection> {credentialsSection, credentialsSection};
this.logging = "log this";
XmlSerializer s = new XmlSerializer(this.GetType());
StringBuilder sb = new StringBuilder();
TextWriter w = new StringWriter(sb);
s.Serialize(w, this);
w.Flush();
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
给出以下输出
<?xml version="1.0" encoding="utf-16"?>
<configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<logging>log this</logging>
<credentials>
<Username>a</Username>
<Password>b</Password>
</credentials>
<credentials>
<Username>a</Username>
<Password>b</Password>
</credentials>
</configuration>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35216 次 |
最近记录: |