【发布时间】:2022-01-23 11:55:57
【问题描述】:
我的数据类的映射有问题。 它包含 164 个属性,这些属性填充了从肥皂网络服务接收到的数据。不要质疑属性数量,这是一个非常古老的预定义 .csv 类数据方案,我无法更改。
据我所知,现在一切正常,但由于有这么多属性,我明确设置了每一个(例如 data.a1 = import.a1 OR data.a1 = export.a1)我有一个大块重复的赋值代码。两种 Web 服务都提供相同的 164 个字段以及两个类不同的一些附加字段。我想我只需要映射 164 个相同的字段,可以忽略/丢弃其他字段。
解决这个问题的正确方法是什么?我曾考虑在构造函数中使用“对象”或其他东西作为数据类型,这样我就可以从两个服务中传递数据,但它似乎不像我想象的那样工作。
任何建议将不胜感激。
/// <summary> Initializes a new instance of the <see cref="DataTypeTest" /> class. </summary>
/// <param name="incomingData"> Record from Export Webservice that will be mapped to the constructed instance. </param>
public Stddat(webExport incomingData)
{
// stddat fields
this.Fields.SndRec = webExport.SndRec;
this.Fields.PrtNum = webExport.PrtNum;
this.Fields.MsgTyp = webExport.MsgTyp;
.
.
.
}
/// <summary> Initializes a new instance of the <see cref="DataTypeTest" /> class. </summary>
/// <param name="incomingData"> Record from Exchange Webservice that will be mapped to the constructed instance. </param>
public Stddat(webExchange incomingData)
{
// stddat fields
this.Fields.SndRec = webExchange.SndRec;
this.Fields.PrtNum = webExchange.PrtNum;
this.Fields.MsgTyp = webExchange.MsgTyp;
.
.
.
}
【问题讨论】:
-
WebExchange 是否继承自 WebExport,反之亦然? (或者它们都继承自具有 164 个通用道具的基类)
-
它们都有自己的由 svcutil.exe 生成的类。我宁愿只有一个类,因为它包含相同的数据。我发现了 WSDL.exe (wsdl.exe /sharetypes) 的命令。这是我第一次使用 Web 服务,而且我在编程世界中通常是“新人”,所以我可能会忽略一些事情。 WSDL.exe 似乎不再受支持,因为我使用的是 .NET 6 而不是 .NET Framework
-
我想如果你不重新生成它们,你可以修改生成的类.. ?
-
(另外,刚刚注意到,您的构造函数头中的代码有
(webExport incomingData)但正文是... = webExport.X有点困惑 - webExport 是类型?这些是静态的吗?或者这段代码是释义/... = incomingData.X的错字 -
您在那里发现了复制/粘贴错误。它必须是 'this.Fields.SndRec = incomingData.SndRec;'我现在正试图将这两个 Web 服务整合到一个类中,但我无法正确获取命名空间。我收到错误消息:“消息中的命名空间“urn:microsoft-dynamics-schemas/page/NxsWebservice”无效,应为“urn:microsoft-dynamics-schemas/page/nxsexport”。但由于消息是服务器响应,我无法更改它,所以我必须以某种方式动态更改预期的命名空间
标签: c# web-services mapping svcutil.exe