【问题标题】:serialization of class into XML C#将类序列化为 XML C#
【发布时间】:2017-12-05 13:11:53
【问题描述】:

我有以下课程,即 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; }

}

我想把它序列化成XML格式

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




</ReconciliationRequest>

但我将其转换为以下格式,我不希望 xml 中的 PatientDetails 标记, 我想要上面提到的结果。

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

      </PatientDetails>
    </ReconciliationRequest>

我不想要 PatientDetails 节点。 下面是我用来将这个类对象序列化为 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();
                }

            }

请指导我如何解决这个问题。

【问题讨论】:

    标签: c# .net xml class xml-serialization


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

    虽然我个人会使用:

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

    【讨论】:

      【解决方案2】:

      试试这个让你的类被 List 继承

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

      并像这样使用它。

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

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

      【讨论】:

      • schemas.xxxxx.co.uk/test/cr"> 我想以这种方式编辑根标签我怎样才能实现这个..并删除我为此编写的其他命名空间下面的代码.. XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces(); nameSpace.Add(string.Empty, "schemas.xxxxx.co.uk/test/crm");
      • 我想你现在明白了。
      • 是的,我知道了,命名空间标签需要添加到根元素上
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多