将类序列化为XML C#
我的课程不及格,即对账请求.cs将类序列化为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]
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标记需要添加到根元素上