Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Listのコピーについて(ディープコピーに失敗)
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30251#CommentId82839
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
やむちゃ
 (社会人)
投稿日時
2017/6/16 15:15:31
Personクラスを継承したCustomPersonという独自のクラスを、Listコレクションにまとめ、それをコピーしたいのですが上手くいきません。
(※Personクラスというのは、あくまでも例です。ちなみに継承せずに、PersonクラスをまとめたListコレクションのディープコピーは上手くいきました。)
下記コードのDeepCopyHelper.DeepCopyにて
シリアライズ後、デシリアライズの際に
(下記のコードでいうと、「result = CType(b.Deserialize(mem), T)」のところです)
「CustomPerson型のオブジェクトを逆シリアル化するコンストラクタが見つかりませんでした。」
というエラーが発生します。
エラー対応としてCustomClassに
Public Sub New()
BloodType = "A"
End Sub
上記のようなコード(コンストラクタ)を追加しましたが、結果は同じでした。
エラーの解決方法、他の方法でコピーが可能であれば、ご教示宜しくお願いします。
###############↓以下、実装してみたコードです ############################
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Form1
Private PersonList As List(Of CustomPerson)
Private CopyList As List(Of CustomPerson)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PersonList = New List(Of CustomPerson)
CopyList = New List(Of CustomPerson)
Dim person1 As New CustomPerson
person1.Type = "A"
PersonList.Add(person1)
Dim person2 As New CustomPerson
person2.Type = "B"
PersonList.Add(person2)
CopyList = DeepCopyHelper.DeepCopy(PersonList)
End Sub
<Serializable>
Public Class CustomPerson
Inherits Person
Property BloodType As String
End Class
Public Class DeepCopyHelper
Public Shared Function DeepCopy(Of T)(ByVal target As T) As T
Dim result As T
Dim b As New BinaryFormatter
Dim mem As New System.IO.MemoryStream()
Try
b.Serialize(mem, target)
mem.Position = 0
result = CType(b.Deserialize(mem), T)
Finally
mem.Close()
End Try
Return result
End Function
End Class