猿问

Web 服务方法 - 无法序列化,因为它没有无参数构造函数

我在我的 .net 项目中添加了一个 web 引用,其中包含 3rd 方服务的方法。


当我尝试调用其中一种方法时,它期望传递一个 OrderIdentifier 对象,但它给了我错误:


InvalidOperationException: <>f__AnonymousType0`3[System.DateTime,ETS_OpenAccessNew.ETS.DateRange,ETS_OpenAccessNew.ETS.AuctionIdentification] 无法序列化,因为它没有无参数构造函数。


我的代码如下:


        OrderIdentifier oi = new OrderIdentifier

        {

            area = testArea,

            portfolio = testPortfolio

        };


        DateRange dr = new DateRange { from = DateTime.Today.AddDays(-7), to = DateTime.Today };

        var Ai = new AuctionIdentification

        {

            Item = DateTime.Today.AddDays(-1),

            ItemElementName = ItemChoiceType1.AuctionDate,

            name = "test",

            duration = AuctionIdentificationDuration.Item30min,

            durationSpecified = true

        };


        object items = new

        {

            deliveryDay = DateTime.Today.AddDays(-1),

            deliveryDays = dr,

            AuctionIdentification = Ai

        }; 


        oi.Items = new object[1] { items };

        var orders = oa.RetrieveOrders(oi);

任何关于我在这里做错的想法将不胜感激

更新 - 我现在已经将无参数构造函数包含在 AuctionIdentification 类中,但仍然出现相同的错误


尚方宝剑之说
浏览 488回答 2
2回答

桃花长相依

异常的消息告诉你,你正在试图序列匿名类型包含DateTime,DateRange以及AuctionIdentification性能和匿名类型的确没有参数构造函数(它们是不变的,所以他们的成员是通过构造函数的参数初始化)。有问题的匿名类型在items此处创建并分配给变量:object items = new // <--{&nbsp; &nbsp; deliveryDay = DateTime.Today.AddDays(-1),&nbsp; &nbsp; deliveryDays = dr,&nbsp; &nbsp; AuctionIdentification = Ai};oi.Items = new object[1] { items };根据Items属性定义[System.Xml.Serialization.XmlElementAttribute("AuctionIdentification", typeof(AuctionIdentification))][System.Xml.Serialization.XmlElementAttribute("deliveryDay", typeof(System.DateTime), DataType="date")][System.Xml.Serialization.XmlElementAttribute("deliveryDays", typeof(DateRange))]public object[] Items {&nbsp; &nbsp; get {&nbsp; &nbsp; &nbsp; &nbsp; return this.itemsField;&nbsp; &nbsp; }&nbsp; &nbsp; set {&nbsp; &nbsp; &nbsp; &nbsp; this.itemsField = value;&nbsp; &nbsp; }}它的阵列objects,其中每个的实际类型object可以是所描述的3种类型中的一个- DateTime,DateRange和AuctionIdentification。有点奇怪的设计,但这是 3rd 方服务的错,而不是你的错。在您的情况下正确的初始化(也应该修复有问题的异常)应该是直接填充数组:oi.Items = new object[] // <--{&nbsp; &nbsp; DateTime.Today.AddDays(-1), // deliveryDay&nbsp; &nbsp; dr, // deliveryDays&nbsp; &nbsp; Ai // AuctionIdentification};

斯蒂芬大帝

问题出在这一行:&nbsp;DateRange dr = new DateRange { from = DateTime.Today.AddDays(-7), to = DateTime.Today };您正在尝试创建一个新实例,DateRange()但它不接受您的初始化,说明您无法初始化该类,因为它没有无参数构造函数,因为您没有提供任何构造函数。这个类的一个很好的例子是:DateRange range = new DateRange(fromDate, toDate, CultureInfo);或者:return new DateRange&nbsp;{&nbsp; &nbsp; from = DateTime.Today.AddDays(-7),&nbsp; &nbsp; to = DateTime.Today};
随时随地看视频慕课网APP
我要回答