为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
尚方宝剑之说 2021-11-21 16:08:57
我在我的 .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 类中,但仍然出现相同的错误
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

异常的消息告诉你,你正在试图序列匿名类型包含DateTime,DateRange以及AuctionIdentification性能和匿名类型的确没有参数构造函数(它们是不变的,所以他们的成员是通过构造函数的参数初始化)。


有问题的匿名类型在items此处创建并分配给变量:


object items = new // <--

{

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

    deliveryDays = dr,

    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 {

    get {

        return this.itemsField;

    }

    set {

        this.itemsField = value;

    }

}

它的阵列objects,其中每个的实际类型object可以是所描述的3种类型中的一个- DateTime,DateRange和AuctionIdentification。


有点奇怪的设计,但这是 3rd 方服务的错,而不是你的错。在您的情况下正确的初始化(也应该修复有问题的异常)应该是直接填充数组:


oi.Items = new object[] // <--

{

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

    dr, // deliveryDays

    Ai // AuctionIdentification

};


查看完整回答
反对 回复 2021-11-21
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

问题出在这一行:


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

您正在尝试创建一个新实例,DateRange()但它不接受您的初始化,说明您无法初始化该类,因为它没有无参数构造函数,因为您没有提供任何构造函数。


这个类的一个很好的例子是:


DateRange range = new DateRange(fromDate, toDate, CultureInfo);


或者:


return new DateRange 

{

    from = DateTime.Today.AddDays(-7),

    to = DateTime.Today

};


查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 480 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信