質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

3615閲覧

VB.NETにおけるxmlファイルのシリアライズ処理について

is0206hs

総合スコア2

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/05/26 05:40

編集2020/06/01 06:05

お世話になっております。
標題の通り、VB.NETにおける「xmlファイル」シリアライズにてご教示いただけませんでしょうか。

別クラスから呼び出された、シリアライズメソッドの処理において
xmlファイルの値が空白だったり書式がおかしかった際に、
下記ソースコードの「Dim obj As T = DirectCast(serializer.Deserialize(sr), T)」部分でエラーが出ます。

エラー内容:
例外がスローされました: 'System.InvalidOperationException' (System.Xml.dll の中)
追加情報:XML ドキュメント (11,3) でエラーが発生しました。

型?のエラーなのかとは思うのですが、
このエラーをtry~CatchでうまくCatchできません。

お手数ですが、Catchがうまくいく方法、もしくは別の方法がありましたら、ご教示願います。

開発環境は以下となります。
・Visual Studio 2015
・.NET Framework 4.7


VB.NET

1該当クラス 2 3Public Function xmlRead(Of T)(ByVal p_xmlFilePath As String) As Object 4 Try 5 'XmlSerializerオブジェクトを作成 6 Dim serializer As New System.Xml.Serialization.XmlSerializer( 7 GetType(T)) 8 9 '読み込むファイルを開く 10 11 If System.IO.File.Exists(p_xmlFilePath) Then 12 Dim sr As New System.IO.StreamReader( 13 p_xmlFilePath, New System.Text.UTF8Encoding(False)) 14 15 16 'XMLファイルから読み込み、逆シリアル化する 17 Dim obj As T = DirectCast(serializer.Deserialize(sr), T) 18 19 'ファイルを閉じる 20 sr.Close() 21 Return obj 22 Else 23 '読み込むファイルがない場合の、エラー処理 24 Throw New System.IO.FileNotFoundException 25 End If 26 27 Catch ex As Exception 28 Throw New Exception 29 End Try 30 31 32別クラス 33 34Try 35 g_XmlObj = util.xmlRead(Of Property)(XmlFileName) 36 37 Catch ex As Exception 38 Me.Close() 39 40 End Try

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/26 06:25

コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も読む気がしないのでは? 開発環境(Visual Studio のバージョン、.NET Framework or Core のどっちかとそのバージョンなど)を書いてください。
is0206hs

2020/05/26 08:29

ご指摘ありがとうございます。 インデント追加させていただきました。 開発環境は以下となります。 ・Visual Studio 2015 ・.NET Framework 4.7
退会済みユーザー

退会済みユーザー

2020/05/27 01:12

> 開発環境は以下となります。 質問欄を編集して追記するようお願いします。コメント欄は初期画面では開いてないので見ない人がいますので。
退会済みユーザー

退会済みユーザー

2020/05/27 01:14

> このエラーをtry~CatchでうまくCatchできません。 コードを見ると Exception をキャッチして、即 Throw New Exception としていますが、そのせいということはありませんか?
is0206hs

2020/06/01 06:01

ご指摘ありがとうございます。 Throwで投げていたところを外せ場、想定通りの動作となりました。
退会済みユーザー

退会済みユーザー

2020/06/01 06:17

> Throwで投げていたところを外せ場、想定通りの動作となりました。 対症療法的にはそれでもいいかもしれませんが、できればデシリアライズで例外をスローさせないで、デシリアライズする前に「xmlファイルの値が空白だったり書式がおかしかった」という部分を何とかした方が良いと思うのですか。 あと、Exception を catch して問題を握りつぶしてしまうのは好ましくないです。Exception を catch すると本来そこでアプリを停止すべき重大な問題まで握りつぶしてしまうことになりますから。そこも考えた方がよさそうです。
is0206hs

2020/06/02 02:52

ご指摘ありがとうございます。 仰る通り、根本原因を解決しないといけませんね。 上司、先輩に質問してみます。
退会済みユーザー

退会済みユーザー

2020/06/02 04:39

このスレッドの質問はとりあえず解決したようですので、質問者さんの方で回答欄に解決した方法を書いてこのスレッドはクローズしていただくようお願いします。
guest

回答1

0

自己解決

Catch後のThrowを抜くことで、対処できました。

投稿2020/06/03 02:12

is0206hs

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問