【发布时间】:2018-05-25 06:20:29
【问题描述】:
我有一个object {System.Collections.Generic.List<object>},其中包含 1000 个 object {DynamicData},每个都有 4 个键和值,还有一个 List,里面有 2 个键和值。
我需要将此对象序列化为 XML 文件,我尝试了正常序列化,但它给了我这个异常 = The type DynamicData was not expected,我该如何序列化这个对象?
代码如下:
//output is the name of my object
XmlSerializer xsSubmit = new XmlSerializer(output.GetType());
var xml = "";
using (var sww = new StringWriter())
{
using (XmlWriter writers = XmlWriter.Create(sww))
{
try
{
xsSubmit.Serialize(writers, output);
}
catch (Exception ex)
{
throw;
}
xml = sww.ToString(); // Your XML
}
}
我可以逐行和逐元素地创建 xml 文件,但我想要更快且代码更少的东西。 我的对象的结构是这样的:
output (count 1000)
[0]
Costumer - "Costumername"
DT - "Date"
Key - "Key"
Payment - "x"
[0]
Adress - "x"
Number - "1"
[1]...
[2]...
【问题讨论】:
-
题外话:您实际上是在与客户打交道?我的意思是,必须存在一些系统,我只是从未遇到过。
-
这只是一个对象的例子,现在是客户,但它可以是你知道的任何东西?我总是会有这个对象里面有不同类型的数据,有时它里面没有一个列表,有时它会有超过 1 个子列表。 PS:我从数据库选择或文件阅读器中获取此对象.....
-
XmlSerializer不太适合您想做的事情。首先,将您的动态对象视为字典,XmlSerializer不直接支持字典。见Why doesn't XmlSerializer support Dictionary? 和How to XML-serialize a dictionary。 -
其次,当序列化多态成员时,
XmlSerializer只会序列化已知的、列入白名单的类型——例如,[XmlInclude]中包含的那些,如xsi:type attribute messing up C# XML deserialization 所示。这是出于安全原因,它可以防止构建有风险的类型,例如 TypeNameHandling caution in Newtonsoft Json 中描述的那些。 -
有关可能的解决方法,请参阅 XML Serialization and Inherited Types 或 Serializing an array of multiple types using XmlSerializer - 但您需要注意可能存在的安全隐患。
标签: c# xml xml-serialization xmlserializer dynamicobject