使用 Web 服务,序列化 XML 响应,将 xml 保存到数据库

Consume Web Service, Serialize XML response, save xml to database

我有这种情况,我正在 C# 中创建一个 Web 服务,我需要在其中使用 SOAP Web 服务,它给我一个 XML 响应,我需要序列化这个 XML 响应并将其保存到 table 在数据库中。

我已经尝试在 Postman 中调用 XML 并且它在

中运行良好

200 OK status

,但我需要如何序列化此响应并将其保存到数据库。

然后我试着写这个:

 public void CreateFilter(Student student)
        {
            var XML = XmlSerialization <Student> (student);

            ConnectDataBase db = new ConnectDataBase();

            SqlCommand cmd = new SqlCommand("sp_Student");
            cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = student.name;
            cmd.Parameters.Add("@surname", SqlDbType.VarChar).Value = student.surname;
            cmd.Parameters.Add("@subject", SqlDbType.VarChar).Value = student.subject;

            cmd.Parameters.Add("@student", SqlDbType.Xml).Value = XML;

        }

关于如何从我必须使用的 Web 服务获得响应,然后序列化我返回的响应,然后将序列化保存在数据库中,有什么想法吗?

提前致谢

好吧,你真的有几个选择。本质上,如果您没有利用 ORM(如 Hibernate 或类似的东西),您想要:

  1. 获取 XML 有效负载
  2. 将其反序列化为一个对象实例,以便您可以使用它
  3. 挑出你感兴趣的数据并持久化

第 2 步本质上是编写一个 class(或 classes 的树)模仿 XML 的字段结构,然后要求库很好地解析 XML 状态转换为 class 的一个实例。这样就可以轻松地为您工作。

您可以按照以下方式利用本机反序列化:

https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer.deserialize?view=net-6.0

或者,为了论证,您也可以使用现代序列化库。对于 XML 和 C#,没有太多好的选择,所以我能想到的主要选择是 Json.NET:

https://www.newtonsoft.com/json

这个库,虽然主要作为 JSON 的 all-in-one 对象映射器推送,但也能够在 XML 和 Json 之间进行转换:

https://www.newtonsoft.com/json/help/html/ConvertingJSONandXML.htm

取决于本机反序列化器进行了多少斗争(定义模式可能有点痛苦,该死的 SOAP,我是对的),使用 Json.NET 可能更容易XML,将其转换为 JSON,然后将 json 反序列化为一个对象。

这为您提供了一个不理想的两步反序列化过程,但这也不是一件坏事,因为您可以使用“不错”的库,而不必与 xml 序列化的东西。

真的是你的选择。我会先给第一个选项一个好的选择,然后如果它带来了太多的战斗,你有 Json.NET 可以依靠 :)