C# 单个属性的自定义XML序列化
我想将字符串[]类型的所有属性序列化为CSV 例如,给定一个类:C# 单个属性的自定义XML序列化,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我想将字符串[]类型的所有属性序列化为CSV 例如,给定一个类: public class Choice { [XmlAttribute] public string[] Options { get; set; } } 以及以下序列化代码: var choice = new Choice() { Options = new[] {"op 1", "op 2"}}; var serializer = new XmlSerializer(typeof(Choice)); var s
public class Choice {
[XmlAttribute]
public string[] Options { get; set; }
}
以及以下序列化代码:
var choice = new Choice() { Options = new[] {"op 1", "op 2"}};
var serializer = new XmlSerializer(typeof(Choice));
var sb = new StringBuilder();
serializer.Serialize(new StringWriter(sb), choice);
Console.WriteLine(sb);
我有以下输出:
注意选项=op 1 op 2部分。如果我对输出进行反序列化,该值将被拆分为4个字符串,从而得到4个数组元素,而不是原来的2个
我想要的是能够为这个特定属性或任何字符串[]类型的属性运行自定义代码,以便控制输出。我不想覆盖整个类的序列化过程
如果这是不可能或太难用缺省的微软序列化器实现的,我将很乐意考虑一个更好的替代方案。
< P>如果它不一定是一个属性,那么只需将[XMLATRATITET]改为[XMLYMENT] 我强烈推荐上面的解决方案,因为序列化的xml更干净、更精确,并且您依赖于XmlSerializer后端来完成所有解析,而不是依赖于您自己的自定义解析。如果绝对必须将其作为属性,则可以忽略Options属性,并使用另一个执行自定义分析的属性将其包装:public class Choice
{
[XmlIgnore]
public string[] Options { get; set; }
[XmlAttribute("Options")]
public string OptionsSerialized
{
get { return ToCsv(Options); }
set { Options = FromCSV(value); }
}
private string ToCsv(string[] input)
{
//implementation here
}
private string[] FromCsv(string[] input)
{
//implementation here
}
}
使用字符串方法:string csv=string.Join,,Options;
public class Choice
{
[XmlIgnore]
public string[] Options { get; set; }
[XmlAttribute("Options")]
public string OptionsSerialized
{
get { return ToCsv(Options); }
set { Options = FromCSV(value); }
}
private string ToCsv(string[] input)
{
//implementation here
}
private string[] FromCsv(string[] input)
{
//implementation here
}
}