C# 反序列化xml以将对象扩展到动态子元素

C# 反序列化xml以将对象扩展到动态子元素,c#,xml,api,C#,Xml,Api,我的要求是调用Api并从Api获取响应,然后保存到db。响应是xml格式的。但相同的Api调用我得到两种类型的xml,如下所示 空气污染指数的核准回应 但是如何识别要动态反序列化的子元素呢 现在iam使用此扩展方法来反序列化已批准的请求 注意:Api只提供Xml格式,没有json,您的解决方案是正确的;您不需要选择,相反,您的类响应应该有两个字段,分别表示已批准和已拒绝。当xml反序列化时,其中一个字段的值将不同于null,另一个字段的值将为null。您可以检查它们以了解您的响应 XML <

我的要求是调用Api并从Api获取响应,然后保存到db。响应是xml格式的。但相同的Api调用我得到两种类型的xml,如下所示

空气污染指数的核准回应

但是如何识别要动态反序列化的子元素呢

现在iam使用此扩展方法来反序列化已批准的请求


注意: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);