列出的名單上有一些具有List<object>
類型的屬性類,我需要使用DataContractSerializer
的那類序列化到XML文件中。序列化失敗使用的DataContractSerializer
序列化上ArgumentException
失敗時,所述對象是List<T>/IEnumerator<T>
異常消息:
名稱無效字符在 「System.Collections.Generic.List`1 [[MyProj.Result,的Myproj, 版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'。
這裏是失敗 ,是以List<object>
[DataContract(IsReference = true)]
public class RecoveryMethodData
{
[DataMember]
public List<object> Parameters { get; set; }
public RecoveryMethodData()
{
Parameters = new List<object>();
}
public static void SerializeToFile(RecoveryMethodData recoveryMethodData, string fileName)
{
var encoding = Encoding.UTF8;
using (var fileWriter = new XmlTextWriter(fileName, encoding))
{
fileWriter.Formatting = Formatting.Indented;
// use SharedTypeResolver for deserializing assistance.
var serializer = new DataContractSerializer(typeof(RecoveryMethodData), null, int.MaxValue, false, true, null, new SharedTypeResolver());
serializer.WriteObject(fileWriter, recoveryMethodData);
}
}
}
下面的類是使用的代碼示例:
private void TestSerialization()
{
var methodData = new RecoveryMethodData();
var result = new Result() {Message = "wow", Pass = true, FileName = "somefile "};
methodData.Parameters.Add(result);
methodData.Parameters.Add(true);
var list1 = new List<Result>();
list1.Add(new Result(){FileName = "in list1", Message = "in l 1"});
list1.Add(new Result(){FileName = "in list2", Message = "in l 2"});
methodData.Parameters.Add(list1);
RecoveryMethodData.SerializeToFile(methodData,@"C:\serialization_result.xml");
}
public class Result
{
public string Message { get; set; }
public string FileName { get; set; }
}
如果我不添加列表1到methodData.Parameters
有序列化methodDatad
對象沒有問題。
的一個大限制是,我不知道哪種對象將被添加到Parameters屬性前進(這就是爲什麼它是對象的列表)
這有幾個問題 - 我給參數添加一個List。所以我創建了一個新類MyList :List ,IMyObject。這也會出現同樣的錯誤。 –
user1052768
2012-03-22 10:43:31
你是對的,列表的問題將持續存在。但主要的問題是,你正試圖序列化未知類型。 c#中的每個類都從對象繼承;但序列化程序應該很熟悉該類以創建相關的xml數據。 – daryal 2012-03-22 12:00:04