我想將一個類序列化爲具有List {List {String}}或String [] []或List {String []}類型字段的XML。在我添加嵌套收集字段之前,我的類正在序列化和反序列化,但是現在在序列化或反序列化時拋出InvalidOperationException。C#將嵌套列表序列化爲XML
我真的不關心,如果我有使用數組或列出了這個特定的實例,但它會很高興地知道,可用於任何嵌套的收集情況的通用解決方案。
目前我場聲明如下:
[XmlElement("foo")]
public List<String[]> foo;
這已經在過去的單級列表和數組的工作對我罰款。
這裏是滿級:
[XmlRoot("ColumnUpdaterPrefs")]
public class ColumnUpdaterPrefs : Prefs {
public ColumnUpdaterPrefs() : base() {
defaultHeaders = new List<String[]>();
}
[XmlAttribute("autoFill")]
public Boolean autoFill = true;
[XmlAttribute("allowErrors")]
public Boolean allowErrors;
[XmlAttribute("allowZeroes")]
public Boolean allowZeroes;
[XmlElement("defaultHeaders")]
public List<String[]> defaultHeaders;
[XmlElement("defaultKey")]
public String defaultKey;
public override Object Clone() {
return new ColumnUpdaterPrefs() {
autoFill = this.autoFill,
allowErrors = this.allowErrors,
allowZeroes = this.allowZeroes,
defaultHeaders = this.defaultHeaders,
defaultKey = this.defaultKey
};
}
}
而且其基類:
[Serializable]
public abstract class Prefs : ICloneable {
[XmlAttribute("name")]
public String name;
public Prefs(String name = null) {
this.name = name;
}
public String Serialize() {
var xs = new XmlSerializer(this.GetType()); //InvalidOperationException occurs here
using (var sw = new StringWriter()) {
xs.Serialize(sw, this);
var result = sw.ToString();
return result;
}
}
public static TPrefs Deserialize<TPrefs>(String xml)
where TPrefs : Prefs {
var xs = new XmlSerializer(typeof(TPrefs)); //InvalidOperationException occurs here
using (var sr = new StringReader(xml)) {
var result = (TPrefs)(xs.Deserialize(sr));
return result;
}
}
public void Write(ApplicationSettingsBase settings, Boolean save = false, String name = null) {
if (settings == null) throw new ArgumentNullException("settings");
if (name == null) name = this.name;
settings[name] = Serialize();
if (save) settings.Save();
}
public static TPrefs Read<TPrefs>(ApplicationSettingsBase settings, String name)
where TPrefs : Prefs {
if (settings == null) throw new ArgumentNullException("settings");
return Deserialize<TPrefs>((String)settings[name]);
}
public static TPrefs ReadOrDefault<TPrefs>(ApplicationSettingsBase settings, String name)
where TPrefs : Prefs, new() {
try { return Read<TPrefs>(settings, name); }
catch { return new TPrefs() { name = name }; }
}
public abstract Object Clone();
}
以下是異常的詳細信息:
第一次機會異常類型'Sy在System.Xml.dll中發生了「stem.InvalidOperationException」 附加信息:無法生成臨時類(結果= 1)。 錯誤CS0030:無法將類型 'System.Collections.Generic.List' 到 '字符串[]' 錯誤CS0029:無法隱式轉換類型 '字符串[]' 到 'System.Collections.Generic.List'
有沒有一種簡單的方法來做到這一點,而無需創建自定義集合類?
'我添加了嵌套收集字段,「我們應該猜測你的類和代碼(或者你會發布它們)嗎? – Eser
如果我切換到列表{{列出字符串}}我收到了CS0030,CS0029和CS0030第二次錯誤。 – JamesFaix