将类序列化为XML C#

将类序列化为XML C#,c#,.net,xml,class,xml-serialization,C#,.net,Xml,Class,Xml Serialization,我的课程不及格,即对账请求.cs using System; using System.Collections.Generic; using System.Xml.Serialization; [XmlRoot("ReconciliationRequest")] [Serializable] public class ReconciliationRequest { public List<Patient> PatientDetails; } [Serializable]

我的课程不及格,即对账请求.cs

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

[XmlRoot("ReconciliationRequest")]
[Serializable]
public class ReconciliationRequest
{

    public List<Patient> PatientDetails;
}
[Serializable]

public class Patient
{
    [XmlElement("NHSNumber")]
    public string NHSNumber { get; set; }

    [XmlElement("PDSChangeSerialNumber")]
    public string PDSChangeSerialNumber { get; set; }

}
使用系统;
使用System.Collections.Generic;
使用System.Xml.Serialization;
[XmlRoot(“对账请求”)]
[可序列化]
公共类对账请求
{
公开病人名单详情;
}
[可序列化]
公立病人
{
[XmlElement(“NHSNumber”)]
公共字符串NHSNumber{get;set;}
[XmlElement(“PDSChangeSerialNumber”)]
公共字符串PDSChangeSerialNumber{get;set;}
}
我想以下面的格式将其序列化为XML

<ReconciliationRequest xmlns="http://schemas.capita.co.uk/pcse/crm">
        <Patient>
            <NHSNumber>1234567890</NHSNumber>
            <PDSChangeSerialNumber>1234</PDSChangeSerialNumber>
        </Patient>




</ReconciliationRequest>

1234567890
1234
但是我把它转换成下面的格式,我不想要xml格式的PatientDetails标记, 我希望它在上面提到的结果

 <ReconciliationRequest>
      <PatientDetails>
        <Patient>
          <NHSNumber>9411992455</NHSNumber>
          <PDSChangeSerialNumber>5</PDSChangeSerialNumber>
        </Patient>
        <Patient>
          <NHSNumber>9801153512</NHSNumber>
          <PDSChangeSerialNumber>20</PDSChangeSerialNumber>
        </Patient>

      </PatientDetails>
    </ReconciliationRequest>

9411992455
5.
9801153512
20
我不想要耐心的详细信息。 下面是我用来将这个类对象序列化为XML的代码

ReconciliationRequest obj = new ReconciliationRequest();
                Patient obj1;
                List<Patient> PatientDetails = new List<Patient>();
                if (results.Entities.Count > 0)
                {
                    var PatientData = results.Entities[0].ToEntity<Contact>();

                    foreach (var item in results.Entities)
                    {
                        obj1 = new Patient();
                        if (item.Attributes.Keys.Contains("scr_nhs_number") && item.Attributes.Keys.Contains("csr_pdsserialchangenumber"))
                        {
                            if (!string.IsNullOrEmpty(item.Attributes["scr_nhs_number"].ToString()))
                            {
                                obj1.NHSNumber = item.Attributes["scr_nhs_number"].ToString();
                            }
                            if (!string.IsNullOrEmpty(item.Attributes["csr_pdsserialchangenumber"].ToString()))
                            {
                                obj1.PDSChangeSerialNumber = item.Attributes["csr_pdsserialchangenumber"].ToString();
                            }

                            PatientDetails.Add(obj1);
                        }
                    }
                    obj.PatientDetails = PatientDetails;


                    XmlSerializer serializer =
       new XmlSerializer(typeof(ReconciliationRequest));
                    TextWriter writer = new StreamWriter("D:\\CS\\data3.xml");
                    XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces();
                    nameSpace.Add(string.Empty, "http://schemas.capita.co.uk/pcse/crm");

                    serializer.Serialize(writer, obj, nameSpace);
                    writer.Close();
                }

            }
对账请求obj=新对账请求();
患者obj1;
List PatientDetails=新列表();
如果(results.Entities.Count>0)
{
var PatientData=results.Entities[0].ToEntity();
foreach(results.Entities中的var项)
{
obj1=新患者();
if(item.Attributes.Keys.Contains(“scr\U nhs\U编号”)和&item.Attributes.Keys.Contains(“csr\U pdsserialchangenumber”))
{
if(!string.IsNullOrEmpty(item.Attributes[“scr\u nhs\u number”].ToString())
{
obj1.NHSNumber=item.Attributes[“scr_nhs_number”]。ToString();
}
如果(!string.IsNullOrEmpty(item.Attributes[“csr\u pdsserialchangenumber”].ToString())
{
obj1.PDSChangeSerialNumber=item.Attributes[“csr_pdsserialchangenumber”]。ToString();
}
PatientDetails.Add(obj1);
}
}
obj.PatientDetails=PatientDetails;
XmlSerializer序列化程序=
新的XmlSerializer(typeof(对账请求));
TextWriter writer=newstreamwriter(“D:\\CS\\data3.xml”);
XmlSerializerNamespaces nameSpace=新的XmlSerializerNamespaces();
nameSpace.Add(string.Empty,“http://schemas.capita.co.uk/pcse/crm");
serializer.Serialize(writer、obj、名称空间);
writer.Close();
}
}
请指导我如何解决此问题。

[XmlRoot(“对账请求”,命名空间=”http://schemas.capita.co.uk/pcse/crm")]
[XmlRoot("ReconciliationRequest", Namespace = "http://schemas.capita.co.uk/pcse/crm")]
public class ReconciliationRequest
{
    [XmlElement("Patient")]    
    public List<Patient> PatientDetails;
}
公共类对账请求 { [XmlElement(“患者”)] 公开病人名单详情; }
虽然我个人会使用:

[XmlElement("Patient")]
public List<Patient> PatientDetails { get; } = new List<Patient>();
[xmlement(“患者”)]
public List PatientDetails{get;}=new List();

尝试此操作,使您的类按列表继承

    public class ReconciliationRequest<T> : List<T>
    {

    }
公共类对账请求:列表
{
}
像这样使用它

    ReconciliationRequest<Patient> obj = new ReconciliationRequest<Patient>();
    obj.Add(new Patient());
对账请求obj=新对账请求();
对象添加(新患者());

这将消除您的详细信息标记。

我想用这种方式编辑根标记。我如何才能实现这一点。并删除我在下面为此编写的代码中编写的其他名称空间。。XmlSerializerNamespaces nameSpace=新的XmlSerializerNamespaces();nameSpace.Add(string.Empty,”);我想您现在已经知道了。是的,我知道了,nameSpace标记需要添加到根元素上