[英]Build a Custom Serialization as String in System.Xml.Serialization
大家好,我有2个这样的课程:
[XmlRoot("Config")]
public class ConfigClass
{
[XmlElement("Configuration1")]
public string Config1 { get; set; }
[XmlArray("Infos")]
[XmlArrayItem("Info")]
public OtherInfo[] OtherInfos { get; set; }
}
public class OtherInfo
{
public string Info1 { get; set; }
public string Info2 { get; set; }
}
当我序列化根类时,XML结果是这样的:
<?xml version="1.0"?>
<Config>
<Configuration1>Text</Configuration1>
<Infos>
<Info>
<Info1>Test 2</Info1>
<Info2>Text 3</Info2>
</Info>
<Info>
<Info1>Test 4</Info1>
<Info2>Text 5</Info2>
</Info>
</Infos>
</Config>
但是我想将OtherInfo
类序列化为单个字符串,如下所示:
<?xml version="1.0"?>
<Config>
<Configuration1>Text</Configuration1>
<Infos>
<Info>
Test 2:Text 3
</Info>
<Info>
Test 4:Text 5
</Info>
</Infos>
</Config>
我该怎么做?
您可以实现IXmlSerializable接口 ,因此Info1
和Info2
属性以<Info>Info1:Info2</Info>
的方式序列化:
public class OtherInfo: IXmlSerializable
{
public string Info1 { get; set; }
public string Info2 { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
var content = reader.ReadElementContentAsString();
if (String.IsNullOrWhiteSpace(content))
return;
var infos = content.Split(':');
if (infos.Length < 2)
return;
this.Info1 = infos[0];
this.Info2 = infos[1];
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteString(String.Format("{0}:{1}", this.Info1, this.Info2));
}
}
如果在应用程序内部还需要具有“ Info1:Info2”格式的那些属性,而不仅仅是Xml序列化,那么您可以在OtherInfo
拥有如下属性,并在序列化中隐藏Info1和Info2:
public class OtherInfo
{
[XmlIgnore]
public string Info1 { get; set; }
[XmlIgnore]
public string Info2 { get; set; }
[XmlText]
public string InfoString
{
get
{
return String.Format("{0}:{1}", this.Info1, this.Info2);
}
set
{
if (String.IsNullOrWhiteSpace(value))
return;
var infos = value.Split(':');
if (infos.Length < 2)
return;
this.Info1 = infos[0];
this.Info2 = infos[1];
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.