gpt4 book ai didi

c# - 从 XSD 创建类

转载 作者:数据小太阳 更新时间:2023-10-29 02:57:53 25 4
gpt4 key购买 nike

这是我目前的情况。我不得不打破有关如何进行 Web 服务调用的标准。我们有 60 多个 WSDL 要连接,名称根据参数更改。我使用 WebClient 动态创建 Web 服务调用并手动构建信封(决定这样做而不是由上层管理人员添加每个 Web 服务)。我收到一个字符串响应,其中包含与 XSD 匹配的有效 XML。我试图弄清楚如何创建一个类来动态引用字段而不是每个 WSDL 一个类(基于正在使用的 XSD 构建一个类)。这是我正在做的:

public string results;

using (WebClient client = new WebClient())
{
string soapENV = @"http://schemas.xmlsoap.org/soap/envelope/";
var payload = @"<?xml version=""1.0"" encoding=""utf-8""?>" +
"<SOAP-ENV:Envelope xmlns:SOAP-ENV='" + soapENV + "'>" +
"<SOAP-ENV:Header/>" +
"<SOAP-ENV:Body>" +
"<" + myParams.requestName + " xmlns='" +
myParams.requestNamespace + "'>" +
"<MtvnSvcVer>1.0</MtvnSvcVer>" +
"<MsgUUID>" + UUID + "</MsgUUID>" +
"<PrcsParms>" +
"<SrcID>" + currentVendorID + "</SrcID>" +
"</PrcsParms>"
................
"</SOAP-ENV:Body>" +
"</SOAP-ENV:Envelope>";
this.results = client.UploadString (URL, payload);
}

为了节省时间和空间,我去掉了一些XML标签。 XSD 响应具有与上面相同的 XML 标记值。然后我调用它执行如下:

string results = connectwareService.InvokeConnectWare();

返回的结果如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<DPNmeAddrInqMtvnSvcRes xmlns="mtvnCWDPNmeAddrInqSvcRes">
<MtvnSvcVer>1.0</MtvnSvcVer>
<MsgUUID>DATA HERE</MsgUUID>
<Svc>
<SvcParms>
<ApplID>DATA HERE</ApplID>
<SvcID>DATA HERE</SvcID>
<SvcVer>1.0</SvcVer>
<RqstUUID>DATA HERE</RqstUUID>
</SvcParms>
<MsgData>
<DPNmeAddrInqResData xmlns="mtvnCWDPNmeAddrInqResData">
<E20007>DATA HERE</E20007>
........
</soapenv:Body>
</soapenv:Envelope>

代码中有没有办法做到这一点?我一直看到人们提到使用 xsd.exe。可以在后面的代码中执行吗?我在想我可以通读并填充一个泛型类,其中标签名称作为名称,数据作为值作为最后的手段,但必须有一种方法可以在代码中即时生成它。我想我可以做的另一种方法是读取所有 60 多个 wsdls 并运行 xsd.exe 来构建所需的类?

此外,仅供引用 - 我正在将旧的 Cold Fusion 代码转换为 C#,我正在尝试找出如何替换其“ConvertXmlToStruct”方法。任何帮助将不胜感激。

最佳答案

xsd.exe 只运行一次来​​构建代表 XSD 中定义的对象的类文件。然后,您使用 XmlSerializer 类将 XML 实际转换(也称为反序列化)为 c# 类。

有很多链接讨论在 C# 中反序列化 XML:

How to use xsd in c#?

http://msdn.microsoft.com/en-us/library/ms950721.aspx

关于c# - 从 XSD 创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com