【发布时间】:2012-11-07 19:52:06
【问题描述】:
我有一个应用程序需要序列化自定义对象并将其发送到 Windows 服务,自定义对象包含 2 个自定义对象列表和一个 int、string 字典。当我尝试序列化对象时,我收到错误消息:
There was an error generating the XML document.
我搜索了一下,发现这通常是由于其中一种数据类型没有正确设置序列化。所以我已经完成并验证了所有自定义类的序列化,据我所知,它设置正确。
我现在的问题是,默认情况下列表和字典是可序列化的还是需要做些什么来序列化它们?或者,是否有更好的方法来序列化要在可执行文件之间传递的自定义对象集合?
编辑:
主自定义类:
[Serializable]
class MoveInInfoRequest : ServerRequestData
{ }
[Serializable]
[XmlInclude(typeof(GetUnitTypesResponseData)), XmlInclude(typeof(VendorObj.RequiredFields)),
XmlInclude(typeof(VendorObj.InsuranceChoice)), XmlInclude(typeof(VendorObj.ProrateSettings))]
public class MoveInInfoResponse : ServerResponseData
{
public GetUnitTypesResponseData UnitTypesInfo
{ get; set; }
public List<VendorObj.RequiredFields> RequiredFields
{ get; set; }
public Dictionary<int, String> RentalPeriods
{ get; set; }
public List<VendorObj.InsuranceChoice> InsCoverageAmounts
{ get; set; }
public VendorObj.ProrateSettings ProrateOptions
{ get; set; }
}
示例子类:其他两个类的设置与此类似,只是要长得多,但它们只使用默认数据类型。
<Serializable(), DataContract([Namespace]:="*companyNamespace*")> _
Public Class InsuranceChoice
Public Sub New()
End Sub
<DataMember()> _
Public InsuranceChoiceID As Integer
<DataMember()> _
Public CoverageDescription As String
<DataMember()> _
Public Premium As Decimal
<DataMember()> _
Public ActualCoverageAmount As Decimal
End Class
【问题讨论】:
-
发布代码将有助于获得答案:)
-
它们是可序列化的,是的。正如@Mihai 所说,代码会有所帮助。
-
List 和 Dictionary 是可序列化的,无需您做任何事情。显然,您在其中放入了一些不存在的东西,或者序列化了其他不存在的东西。
-
这个问题不是特定于代码的,它更适合一般参考,因为我无法通过谷歌找到直接答案。但是我添加了主类和子类之一,以防出现明显错误......
-
My question now is, are lists and dictionaries serializable by default or does something need to be done in order to serialize them可以序列化的内容和字段/属性取决于您使用的序列化程序。没有一般规律。例如,XmlSerializer 不需要Serializable属性,它仅由 BinaryFormatter 使用(?)
标签: c# serialization