列出的名单上有一些具有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