我遇到了这种情况,我正在C#中创建一个Web Service,需要在其中使用一个SOAPWeb Service,该服务返回一个XML响应,我需要序列化此XML响应并将其保存到数据库中的表中。
我已经尝试在Postman中调用XML,它与
200 OK状态
,但我需要如何序列化这个响应并将其保存到数据库中。
然后我试着写这个:
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服务中获得响应,然后序列化我要返回的响应并将序列化保存在数据库中,您有什么想法吗?
先谢谢你了
1条答案
按热度按时间yftpprvb1#
实际上,您有几个选择。本质上,如果您不利用ORM(如Hibernate或类似的),您希望:
1.获取XML负载
1.将其反序列化为对象示例,以便可以使用它
1.挑选出您感兴趣的数据并将其持久化
第二步基本上是写一个类(或类树)来模拟XML的字段结构,然后请求一个库很好地将XML状态解析成该类的示例,这样就很容易使用。
您可以利用本机反序列化,如下所示:
https://learn.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer.deserialize?view=net-6.0
或者,出于参数的考虑,您也可以使用一个现代的序列化库。当涉及到XML和C#时,没有太多好的选择,所以我能想到的将您从a点带到b点的主要选择是Json.NET:
https://www.newtonsoft.com/json
尽管这个库主要是作为JSON的一体化对象Map器推出的,但它也能够在XML和JSON之间进行转换:
https://www.newtonsoft.com/json/help/html/ConvertingJSONandXML.htm
取决于原生反序列化器的工作量(定义模式可能有点痛苦,我说的没错吧,该死的SOAP),使用Json.NET收集XML,将其转换为JSON,然后将该json反序列化为对象可能会更容易。
这给了你一个两步的反序列化过程,这并不理想,但这也不是一件坏事,因为你可以使用“不错”的库,而不必与xml序列化中的旧东西作斗争。
选择权在你。我会先给予第一个选择一个好的开始,然后如果它提出了太多的斗争,你有Json.NET可以依靠:)