トップ回答者
List(Of Point3D)形式のデシリアライズで発生する例外

質問
-
List(Of Point3D)形式の配列の逆シリアル化ができません。
例外のメッセージの意味が分からず、対処できません。
どうしたら正常に処理できますか。
↓このメソッドは正常に処理される
Private Sub BT_save_Click(sender As Object, e As RoutedEventArgs) Handles BT_save.Click
'保存先のファイル名
Dim fileName As String = "C:\1.xml"
Dim arr1 = New List(Of Point3D)
arr1.Add(New Point3D(0, 0, 0))
arr1.Add(New Point3D(-1, 0, -3))
Dim serializer As New System.Xml.Serialization.XmlSerializer(
GetType(List(Of Point3D)))
Dim sw As New System.IO.StreamWriter(
fileName, False, New System.Text.UTF8Encoding(False))
'シリアル化し、XMLファイルに保存する
serializer.Serialize(sw, arr1)
sw.Close()
End Sub
’例外が発生するメソッド
Private Sub BT_load_Click(sender As Object, e As RoutedEventArgs) Handles BT_load.Click
Dim fileName As String = "C:\1.xml"
Dim serializer As New DataContractSerializer(GetType(List(Of Point3D)))
Dim xr As XmlReader = XmlReader.Create(fileName)
'逆シリアル化
’↓この下の行で例外発生
Dim arr1 = DirectCast(serializer.ReadObject(xr), List(Of Point3D))
xr.Close()
Stop
End Sub
例外の内容
System.Runtime.Serialization.SerializationException
HResult=0x8013150C
Message=2 行目の位置 2 にエラーがあります。 名前空間 'http://schemas.datacontract.org/2004/07/System.Windows.Media.Media3D' の要素 'ArrayOfPoint3D' を指定してください。。名前が 'ArrayOfPoint3D'、名前空間が '' の 'Element' が検出されました。
"C:\1.xml"の内容
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPoint3D xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Point3D>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Point3D>
<Point3D>
<X>-1</X>
<Y>0</Y>
<Z>-3</Z>
</Point3D>
</ArrayOfPoint3D>
回答
-
ひょっとして、XmlSerializerでシリアライズしたXMLをDataContractSerializerでデシリアライズしようとしていませんか?
使用するシリアライザは統一する必要があります。
- 回答の候補に設定 ShiroYuki_Mot 2020年12月12日 9:40
- 回答としてマーク huahi11112 2020年12月14日 8:19
すべての返信
-
ひょっとして、XmlSerializerでシリアライズしたXMLをDataContractSerializerでデシリアライズしようとしていませんか?
使用するシリアライザは統一する必要があります。
- 回答の候補に設定 ShiroYuki_Mot 2020年12月12日 9:40
- 回答としてマーク huahi11112 2020年12月14日 8:19
-
huahi11112さん、こんにちは。フォーラムオペレーターのKumoです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
本件、Hongliangさんより参考になる投稿が寄せられたようでなによりです。
[回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。
お手数ですが、ご協力の程どうかよろしくお願いいたします。
引き続きMSDNフォーラムをご利用いただけますようお願い申し上げます。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~