首页 > 解决方案 > 转换xml字符串不同的对象

问题描述

有3个这样的课程

public class Product
{
  public string ProudctId { get; set; }
  public string ProductName { get; set; }
}
public class Owner
{
  public string OwnerId { get; set; }
  public string OwnerName { get; set; }
}
public class Master
{
  public string MasterId { get; set; }
  public string MasterName { get; set; }
}

我已经设法将这些对象转换为 XML 字符串。现在,我想从 XML 中获取原始对象。XML 如下所示:

<ProjectDetails>
   <Product>
       <ProductId>1</ProductId>
       <ProductName>Product 1</ProductName>
   </Product>
   <Owner>
       <OwnerId>1</OwnerId>
       <OwnerName>Owner 1</OwnerName>
   </Owner>
   <Master>
       <MasterId>1</MasterId>
       <MasterName>Master 1</MasterName>
   </Master>
</ProjectDetails>

问题是,如何将上面的 xml 转换成 3 个对象?某些对象的数据可能在 XML 中不可用。例如,主节点可能在 XML 中可用,也可能不可用。根节点名称是固定的(ProjectDetails)。

非常感谢任何帮助。

标签: c#xmlclassobject

解决方案


var yourXML = @"<ProjectDetails>
       <Product>
           <ProductId>1</ProductId>
           <ProductName>Product 1</ProductName>
       </Product>
       <Owner>
           <OwnerId>1</OwnerId>
           <OwnerName>Owner 1</OwnerName>
       </Owner>
       <Master>
           <MasterId>1</MasterId>
           <MasterName>Master 1</MasterName>
       </Master>
    </ProjectDetails>"    

XmlSerializer serializer = new XmlSerializer(typeof(ProjectDetails));
using (TextReader reader = new StringReader(yourXML)) {
    ProjectDetails result = (ProjectDetails) serializer.Deserialize(reader);
}

或者,如果您希望单独反序列化Product, Owner,请Master替换ProjectDetails为您要反序列化的类型。或者创建一个通用辅助函数来反序列化任何类型。(见https://stackoverflow.com/a/3187539/6419909

这称为反序列化对象,在您的情况下称为 XML 反序列化。请参阅如何将 xml 反序列化为对象以进行进一步讨论。


推荐阅读