コードで NetDataContractSerializer によって型がシリアライズ可能かどうかをテストする方法はありますか? NetDataContractSerializer を内部で使用するジェネリック クラスを作成しており、コンストラクターが処理できない型で使用しようとすると、コンストラクターで例外をスローしたいと考えています。
1 に答える
0
これが私がこれまでに見つけたものです。もっと簡単な方法はありますか?
Private Sub ConfirmTypeIsNetDataContractSerializable(type As Type)
Dim specialAllowedTypes As Type() = {GetType(Decimal), GetType(String), _
GetType(DateTime), GetType(DateTimeOffset), GetType(TimeSpan), _
GetType(Guid), GetType(Uri), GetType(XmlQualifiedName), GetType(XmlElement), GetType(XmlNode)}
If type.IsPrimitive() OrElse specialAllowedTypes.Contains(type) Then Return
If type.IsDefined(GetType(DataContractAttribute), inherit:=False) Then Return
If type.IsDefined(GetType(SerializableAttribute), inherit:=False) Then Return
If type.IsEnum Then Return
If type.GetInterfaces().Contains(GetType(IXmlSerializable)) Then Return
Dim serializer As New NetDataContractSerializer
Using dummyStream As New System.IO.MemoryStream()
serializer.Serialize(dummyStream, Activator.CreateInstance(type)) ' throws exception if not serializable
End Using
End Sub
于 2012-07-24T20:33:21.233 に答える