【问题标题】:System.Tuple cannot be serialized because it does not have a parameterless constructorSystem.Tuple 无法序列化,因为它没有无参数构造函数
【发布时间】:2017-03-08 08:04:17
【问题描述】:

我试图创建一个简单的 Web 服务,其中只包含一个返回元组项的函数,问题是在部署 ASMX 文件后出现此错误:

导致此问题的功能是:

 [WebMethod]
        public Tuple<String[],String> BeginTest(String url, String ip_public, int port_external, String ip_internal, int port_inner, bool isInner)
        {
            Ping ping = new Ping();
            String errorMSG = "Null";
            String[] info = new string[3];
            PingReply pingreply = null;

            try
            {
                if (isInner)
                {
                     pingreply = ping.Send(ip_internal);
                }
                else
                {
                     pingreply = ping.Send(ip_public);
                }

                info[0] = pingreply.RoundtripTime.ToString() ;
                info[1] = pingreply.Options.Ttl.ToString();
                info[2] = pingreply.Buffer.Length.ToString();


            }
            catch (Exception err)
            {
                errorMSG = err.Message.ToString();
            }

            return new Tuple<string[], string>(info, errorMSG);



        }

【问题讨论】:

  • 为什么要使用元组
  • @LeiYang 如果可能的话,我需要检索 2 个不同的字符串,如果有更好的方法我没有更改代码的问题。
  • 知道 WCF 中的 DataContract 吗?
  • @LeiYang 不,我以前不知道

标签: c# asp.net web-services


【解决方案1】:

创建您自己的元组类,称为 MyTuple,它确实有一个无参数构造函数。

public class MyTuple<TypeParameter1, TypeParameter2>
{
    public TypeParameter1 Value1 { get; set; }
    public TypeParameter2 Value2 { get; set; }

    public MyTuple()
    {

    }
    public MyTuple(TypeParameter1 value1, TypeParameter2 value2)
    {
        Value2 = value2;
        Value1 = value1;
    }
}

更多信息在这里: https://www.codeproject.com/Articles/1052516/Csharp-Generics-for-beginners-Part

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2015-09-13
    相关资源
    最近更新 更多