使用 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 或类似的东西),您想要:
- 获取 XML 有效负载
- 将其反序列化为一个对象实例,以便您可以使用它
- 挑出你感兴趣的数据并持久化
第 2 步本质上是编写一个 class(或 classes 的树)模仿 XML 的字段结构,然后要求库很好地解析 XML 状态转换为 class 的一个实例。这样就可以轻松地为您工作。
您可以按照以下方式利用本机反序列化:
或者,为了论证,您也可以使用现代序列化库。对于 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 可以依靠 :)
我有这种情况,我正在 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 或类似的东西),您想要:
- 获取 XML 有效负载
- 将其反序列化为一个对象实例,以便您可以使用它
- 挑出你感兴趣的数据并持久化
第 2 步本质上是编写一个 class(或 classes 的树)模仿 XML 的字段结构,然后要求库很好地解析 XML 状态转换为 class 的一个实例。这样就可以轻松地为您工作。
您可以按照以下方式利用本机反序列化:
或者,为了论证,您也可以使用现代序列化库。对于 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 可以依靠 :)