c#:如何在向asmx服务发送文件时包含文件名

时间:2015-03-17 08:48:25

标签: c# web-services asmx

我有一个asmx方法接受如下文件列表:

[WebMethod]
public void UploadFiles(List<byte[]> files)
{

}

Windows元数据不包含在字节数组中。我尝试使用Dictionary<filename, byte[]>,但实现IDictionary的类不可序列化。我也试过使用KeyValuePair<string, byte[]>[],但IMO看起来很脏。 还有其他方法可以包含文件名吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,通过制作自定义数据类可以轻松解决这个问题。

令人遗憾的是,字典不可序列化,但它是XML序列化过程的固有缺陷。对于带有循环引用的数据类也是如此,它只是不起作用 但是,WCF设法解决了这些问题。但是你正在使用.asmx(SOAP),因此你会遇到不幸的不兼容问题。

我只是制作一个自定义课程:

[Serializable]
public class File
{
    public string FileName {get;set;}
    public byte[] Payload {get;set;}
}

然后将您的网络方法更改为:

[WebMethod]
public void UploadFiles(List<File> files)
{
    //...
}

简单但有效:)