【问题标题】:How can I return a user defined object from ASMX Webservice如何从 ASMX Webservice 返回用户定义的对象
【发布时间】:2013-06-27 21:06:42
【问题描述】:
    [WebMethod]
    public engineer getItem()
    {
        DataClasses1DataContext db = new DataClasses1DataContext();
        List<string> list = new List<string>();
        string tcNo="13609224456";
        var bilgiler = db.bilgilers.First(c => c.tc_kimlik_no ==tcNo);

        string adi = bilgiler.adi;
        string soyadi = bilgiler.soyadi;
        string universite = bilgiler.universite;
        engineer e = new engineer(tcNo, adi, soyadi, universite);

        return e;
    }

我有不止一种方法,我可以无错误地运行 web 服务,但是当我调用 getItem() 方法时,我得到以下异常。我该如何解决这个问题?

[InvalidOperationException: Parametresiz oluşturucusu olmadığından MUHENDIS.Service1.engineer seri hale getirilemez.]
   System.Xml.Serialization.TypeDesc.CheckSupported() +3938411
   System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError) +170
   System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +65
   System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +236

[InvalidOperationException: 'getItemResult' yansıtmada bir hata oluştu.]
   System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) +843
   System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, XmlMappingAccess access) +130
   System.Web.Services.Protocols.SoapReflector.ImportMembersMapping(XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, Boolean serviceDefaultIsEncoded, Boolean rpc, SoapBindingUse use, SoapParameterStyle paramStyle, String elementName, String elementNamespace, Boolean nsIsDefault, XmlReflectionMember[] members, Boolean validate, Boolean openModel, String key, Boolean writeAccess) +223
   System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs) +2989

编辑:Google 将异常消息翻译如下:

  1. MUHENDIS.Service1.engineer 不是无参数构造函数被序列化。
  2. 'getItemResult' 以反映发生的错误。

【问题讨论】:

  • 猜猜你需要一个工程师的无参数构造函数
  • @V4Vendetta 它可以工作,但是我如何在没有构造函数的情况下定义一个对象??
  • 未命名 - 如果您也发布您的工程师课程源代码会有所帮助。但基于堆栈跟踪@V4Vendetta 是正确的。
  • @Unnamed - 您必须定义无参数构造函数,以便序列化程序可以使用该对象。如果您无法触及业务域中的对象,则必须为 Web 服务创建另一个对象,并将属性从业务域对象复制到 Web 服务对象。
  • @Unnamed 你需要一个 parameterless constructor ,检查那里解释的链接(类似于engineer(){}

标签: c# web-services object asmx


【解决方案1】:

您需要确保您的工程师类被标记为可序列化。

[Serializable]
public class engineer{ ....

【讨论】:

【解决方案2】:

我认为,您需要像这样定义 getItem 方法。

[WebMethod]
[XmlInclude(typeof(engineer))]
public engineer getItem(){
//codes here
}
//engineer class here

没有 XmlInclude 属性,XmlSerializer 将无法序列化工程师

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 2012-08-30
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多