C# 反序列化xml以将对象扩展到动态子元素
我的要求是调用Api并从Api获取响应,然后保存到db。响应是xml格式的。但相同的Api调用我得到两种类型的xml,如下所示 空气污染指数的核准回应 但是如何识别要动态反序列化的子元素呢 现在iam使用此扩展方法来反序列化已批准的请求C# 反序列化xml以将对象扩展到动态子元素,c#,xml,api,C#,Xml,Api,我的要求是调用Api并从Api获取响应,然后保存到db。响应是xml格式的。但相同的Api调用我得到两种类型的xml,如下所示 空气污染指数的核准回应 但是如何识别要动态反序列化的子元素呢 现在iam使用此扩展方法来反序列化已批准的请求 注意:Api只提供Xml格式,没有json,您的解决方案是正确的;您不需要选择,相反,您的类响应应该有两个字段,分别表示已批准和已拒绝。当xml反序列化时,其中一个字段的值将不同于null,另一个字段的值将为null。您可以检查它们以了解您的响应 XML <
注意:Api只提供Xml格式,没有json,您的解决方案是正确的;您不需要选择,相反,您的类响应应该有两个字段,分别表示已批准和已拒绝。当xml反序列化时,其中一个字段的值将不同于null,另一个字段的值将为null。您可以检查它们以了解您的响应 XML
<Message>
<Body>
<PaResponse>
<Approved>
</Approved>
</Paresponse>
</Body>
</Message>
<Message>
<Body>
<PaResponse>
<Decliened>
</Decliened>
</Paresponse>
</Body>
</Message>
class Message{
public Body Body {get;set;}
}
class Body{
public Paresponse PaResponse { get;set;}
}
class PaResponse{
//here is the proplem i need choose dynamically for this child object
public Approved {get;set;}
//public Decliened {get;set;}
}
public static T DeserializeObject<T>(this string xml)
where T : new()
{
if (string.IsNullOrEmpty(xml))
{
return new T();
}
try
{
using (var stringReader = new StringReader(xml))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(stringReader);
}
}
catch (Exception ex)
{
return new T();
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Message>
<Body>
<PaResponse>
<Approved>
</Approved>
<Decliened>
</Decliened>
</PaResponse>
</Body>
</Message>
// I just saved the xml to a file, in your case
// you will read it from the API
string path = @"G:\Projects\StackOverFlow\WpfApp1\Message.xml";
FileStream reader = File.OpenRead(path);
XmlSerializer ser = new XmlSerializer(typeof(Message));
Message message = (Message)ser.Deserialize(reader);