[英]Custom serialization of KeyValuePair as single property instead of separate “key” and “value”
[英]Custom XML serialization for a single property
我想將string []類型的所有屬性序列化為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 sb = new StringBuilder();
serializer.Serialize(new StringWriter(sb), choice);
Console.WriteLine(sb);
我有以下輸出:
<Choice xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Options="op 1 op 2" />
請注意Options="op 1 op 2"
部分。 如果我反序列化輸出,則該值將分為4個字符串,從而為我提供4個數組元素,而不是原來的2個數組元素。
我想要的是能夠為此特定屬性(或string[]
類型的任何屬性)運行自定義代碼,以便我控制輸出。 我不想覆蓋整個類的序列化過程。
如果使用默認的Microsoft Serializer不可能或太難實現,那么我很樂意考慮一個更好的選擇。
如果不是絕對必須是屬性,則只需將[XmlAttribute]
更改為[XmlElement]
public class Choice
{
[XmlElement]
public string[] Options { get; set; }
}
我強烈推薦上述解決方案,因為序列化的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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.