.NET c#序列化为Parm名称和值

本文关键字:Parm 序列化 NET | 更新日期: 2023-09-27 18:15:15

我有以下对象:

public class sampleObj
{
    public string MemberId {get;set;}
    public string Address {get;set;}
}

与我交谈的服务希望在<Parm/>元素的name属性中定义Property Names,其值在子"Xml元素中,如下所示:

<Parm Name="SampleObj">
  <Parm Name="MemberId">
    <Value>1234</Value>
  </Parm>
  <Parm Name="Address">
    <Value>xyz</Value>
  </Parm>
</Parm>

当我将sampleObj序列化为XML时,我得到了以下不正确的XML:

<sampleObj>
  <MemberId>1234</MemberId>
  <Address>xyz</Address>
</sampleObj>

如何根据需要序列化我的对象?

.NET c#序列化为Parm名称和值

您可以简单地使用Linq2Xml(我发现大多数时候使用它更容易(

var root = new XElement("Parm",
                new XAttribute("Name", "SampleObj"),
                new XElement("Parm",
                    new XAttribute("Name", "MemberId"),
                    new XElement("Value", "1234")
                ),
                new XElement("Parm",
                    new XAttribute("Name", "Address"),
                    new XElement("Value", "xyz")
                )
            );
var output = root.ToString();

输出:

<Parm Name="SampleObj">
  <Parm Name="MemberId">
    <Value>1234</Value>
  </Parm>
  <Parm Name="Address">
    <Value>xyz</Value>
  </Parm>
</Parm>
/// <summary>
/// When serialized, sampleObj is 'Parm' element
/// </summary>
[XmlRoot("Parm")]
public class sampleObj
{
    /// <summary>
    /// Name is an attribute of sampleObj/Parm
    /// </summary>
    [XmlAttribute("Name")]
    public string Name { get; set; }
    /// <summary>
    /// Value is an element of sampleObj/Parm
    /// </summary>
    [XmlElement("Value")]
    public string Value { get; set; }
    /// <summary>
    /// sampleObj has sampleObj list as elements
    /// </summary>
    [XmlElement("Parm")]
    public List<sampleObj> sampleObjs { get; set; }
}

产生结果:

<?xml version="1.0" encoding="utf-8"?>
<Parm Name="sampleObj">
  <Parm Name="MemberId">
    <Value>1234</Value>
  </Parm>
  <Parm Name="Address">
    <Value>xyz</Value>
  </Parm>
</Parm>

注:

如果需要,还有其他步骤(使用XmlSerializer类(可以删除该指令。