简体   繁体   中英

serialization of class into XML C#

I'm Having Below Class ie ReconciliationRequest.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; }

}

I want to serialize it into XML In Below Format

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




</ReconciliationRequest>

But I'm Getting It into below format,i dont want PatientDetails tag in xml, iwant it in above mentioned result.

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

      </PatientDetails>
    </ReconciliationRequest>

I don't want PatientDetails Node . Below is the code i used to serialize this class object into 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();
                }

            }

Please guide me how can resolve this.

[XmlRoot("ReconciliationRequest", Namespace = "http://schemas.capita.co.uk/pcse/crm")]
public class ReconciliationRequest
{
    [XmlElement("Patient")]    
    public List<Patient> PatientDetails;
}

although personally I'd use:

[XmlElement("Patient")]
public List<Patient> PatientDetails { get; } = new List<Patient>();

Try this make your class inherit by List

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

    }

and use it like this.

    ReconciliationRequest<Patient> obj = new ReconciliationRequest<Patient>();
    obj.Add(new Patient());

This will Eliminate your details tag.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM