2011-12-21 8 views
0

こんにちは私はASP.NET Webサービスから2D配列を返す必要があります。ASP.NET Webサービスは2次元配列をシリアライズ

まず私は、このソリューションを試してみました:

[WebMethod] 
    public string[,] ReturnMultiDimArray() 
    { 
     var x = new string[,] { { "ab" }, { "cd" } }; 
     return x; 
    } 

私はエラーを得た:

は[、]タイプの可能System.Stringのオブジェクトをシリアル化することはできません。多次元配列はサポートされていません。

私はこの方法を試しました。

[WebMethod] 
    public string[][] ReturnMultiDimArray() 
    { 
     string[] y = { "ab", "cd" }; 
     string[] z = { "ef", "gh" }; 
     string[][] x = { y, z }; 
     return x; 
    } 

私はこのエラーを得た:

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidCastException: Unable to cast object of type 'System.String[][]' to type 'System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.String]]'. 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write5_ArrayOfArrayOfString(Object o) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.ListOfListOfStringSerializer4.Serialize(Object objectToSerialize, XmlSerializationWriter writer) 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    --- End of inner exception stack trace --- 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces) 
    at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o) 
    at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue) 
    at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 
    at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 
    at System.Web.Services.Protocols.WebServiceHandler.Invoke() 

私は "2次元配列" シリアライズするにはどうすればよいですか?私はWebメソッド "2D配列"からの復帰が必要です。

答えて

0

は、私は彼が標準ではありませんsimole XMLシリアル化を行う2次元配列に従ってWEBサービスをシリアル化が必要だと思うstring[]のラッパークラスを使用して

[Serializable] 
public class StringArray 
{ 
    public StringArray() 
    { 
    } 
    public StringArray(params string[] arr) 
    { 
     this.Array = arr; 
    } 
    public string[] Array; 
} 

MemoryStream m = new MemoryStream(); 
StringArray[] strArr = new StringArray[] { new StringArray("a", "b"), new StringArray("c", "d", "e") }; 
XmlSerializer xs = new XmlSerializer(typeof(StringArray[])); 
xs.Serialize(m,strArr); 
+0

それの配列を返します。 – Mike

+0

参照http://stackoverflow.com/a/553842/932418 –