2

I'm Having Below Class i.e 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.

shweta
  • 319
  • 2
  • 8
  • 21

2 Answers2

3
[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>();
Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
1

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.

Aman Seth
  • 196
  • 6
  • i want to edit root tag in this way how can i achive this ..and remove other namespace I wrote Below code for this.. XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces(); nameSpace.Add(string.Empty, "http://schemas.xxxxx.co.uk/test/crm"); – shweta Dec 05 '17 at 14:08
  • I think you got it by now. – Aman Seth Dec 08 '17 at 10:50
  • Yes i got it,Namespace tag need to add on root element – shweta Dec 11 '17 at 05:25