转换xml字符串不同的对象

时间:2018-07-09 14:09:52

标签: c# xml class object

有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)。

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

containerd

或者,如果您希望分别对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); } ProductOwner进行反序列化,请将Master替换为您要反序列化的类型。或创建一个通用的辅助函数来反序列化任何类型。 (请参阅https://stackoverflow.com/a/3187539/6419909

这称为反序列化对象,在您的情况下称为XML反序列化。参见How to deserialize xml to object进行进一步的讨论。