我的班级有object
字段,应该能够容纳null
,DbNull
,int
s,string
s,{ {1}}或bool
s。到目前为止,我已经能够double
自动检测数据类型并正确序列化我的课程,除非XmlSerializer
为object
。
我收到此错误:DbNull
。
这里最简单的解决方法是什么?
实际上没有太多代码可供展示。这可能是我的代码:
"The type System.DBNull was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."
public class MyClass
{
public object MyMultiTypesObject { get; set; }
}
将收到一个值,该值将是我上面提到的任何类型,因为它将是由MyMultiTypesObject
处理时从原始javascript数据类型到C#数据类型的转换。 AFAIK,这些都是你将获得的类型。例如,WebBrowser
转为number
或double
s,int
转为undefined
,null
转为null
}。
我按照通常使用DbNull
序列化类的方式对其进行序列化,有点像这样:
XmlSerializer
答案 0 :(得分:1)
尽管可以序列化System.DBNull类,但System.DBNull被设计为每个AppDomain只有一个实例。这些类型通常被称为单身人士。如果您有一个字段引用DBNull对象,则序列化和反序列化它不应该导致新的DBNull对象存在于AppDomain中。这就是默认序列化机制拒绝序列化的原因。
我认为你有两种方式:
希望这篇精彩的文章可以帮到你:How to Implement IXmlSerializable Correctly。
答案 1 :(得分:1)
可以xml序列化DBNull。见:
http://msdn.microsoft.com/en-us/library/ms731923(v=vs.110).aspx
将您的班级标记为:
[Serializable]
[System.Xml.Serialization.XmlRoot("PropertyEntry", Namespace = "", IsNullable = false)]
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public class PropertyEntry {}