WCFで配列の受け渡し(多次元配列とジャグ配列)
WCFで多次元配列の受け渡しをしたくて困ってたら
コレクションのシリアル化
データ コントラクトのコレクション型
コレクションのシリアル化規則を以下に示します。
・コレクション型は、組み合わせる (コレクションのコレクションを持つ) ことができます。 ジャグ配列は、コレクションのコレクションとして扱われます。 多次元配列はサポートされていません。
お、おぅ。
多次元配列はダメだからジャグ配列にしてね、と。
業務コードは多次元配列で色々組んでるから、WCFに飛ばす時にジャグ配列に変換し、返ってきたジャグ配列を多次元配列に戻してあげればいいね。
''' <summary> ''' 二次元配列からジャグ配列に変換します。 ''' </summary> ''' <param name="multiArray">二次元配列</param> ''' <returns>ジャグ配列</returns> ''' <remarks></remarks> Public Function ConvertToJaggedArray(multiArray As String(,)) As String()() Dim numOfColumns = multiArray.GetLength(0) Dim numOfRows = multiArray.GetLength(1) Dim jaggedArray = New String(numOfColumns - 1)() {} For c = 0 To numOfColumns - 1 jaggedArray(c) = New String(numOfRows - 1) {} For r = 0 To numOfRows - 1 jaggedArray(c)(r) = multiArray(c, r) Next Next Return jaggedArray End Function ''' <summary> ''' ジャグ配列から二次元配列に変換します。 ''' </summary> ''' <param name="jaggedArray">ジャグ配列</param> ''' <returns>二次元配列</returns> ''' <remarks></remarks> Public Function ConvertTo2DArray(jaggedArray As String()()) As String(,) Dim numOfColumns = jaggedArray.Length Dim numOfRows = jaggedArray(0).Length Dim temp2DArray = New String(numOfColumns - 1, numOfRows - 1) {} For c = 0 To numOfColumns - 1 For r = 0 To numOfRows - 1 temp2DArray(c, r) = jaggedArray(c)(r) Next Next Return temp2DArray End Function
ここを参考にさせていただきました。
.net - jagged arrays <-> multidimensional arrays conversion in ASP.NET - Stack Overflow