最近在做C# 一個項目,涉及到序列化知識點,但對于複雜的xml格式不知道如何編寫實體類,網上也沒找到相同類型格式的xml介紹的部落格資料,是以研究了兩天,終于做出來了,先把XML格式的字元串貼上來。
<REQUEST_COMMON_FPKJ class="REQUEST_COMMON_FPKJ">
<COMMON_FPKJ_FPT class="COMMON_FPKJ_FPT">
<FPQQLSH>CW201906271117030642</FPQQLSH>
<DDH></DDH>
<KPLX>0</KPLX>
<BMB_BBH>30.0</BMB_BBH>
<XSF_NSRSBH>15000119230104170217</XSF_NSRSBH>
<XSF_MC>15000119230104170217</XSF_MC>
<XSF_DZDH>中國杭州西湖區龍井路002号</XSF_DZDH>
<XSF_YHZH></XSF_YHZH>
<GMF_NSRSBH></GMF_NSRSBH>
<GMF_MC>Gwyy001</GMF_MC>
<GMF_DZDH></GMF_DZDH>
<GMF_YHZH></GMF_YHZH>
<GMF_SJ></GMF_SJ>
<GMF_EMAIL></GMF_EMAIL>
<KPR>Kwyy001</KPR>
<SKR></SKR>
<FHR></FHR>
<YFP_DM></YFP_DM>
<YFP_HM></YFP_HM>
<JSHJ>99.9</JSHJ>
<HJJE>90</HJJE>
<HJSE>9.9</HJSE>
<BZ></BZ>
<ZXBMmm></ZXBMmm>
</COMMON_FPKJ_FPT>
<COMMON_FPKJ_XMXXS class="COMMON_FPKJ_XMXX" size="2">
<COMMON_FPKJ_XMXX>
<FPHXZ>2</FPHXZ>
<SPBM>103011102</SPBM>
<ZXBM></ZXBM>
<YHZCBS>0</YHZCBS>
<LSLBS></LSLBS>
<ZZSTSGL></ZZSTSGL>
<XMMC>水果</XMMC>
<GGXH></GGXH>
<DW>kk</DW>
<XMSL>1</XMSL>
<XMDJ>100</XMDJ>
<XMJE>100</XMJE>
<SL>0.11</SL>
<SE>11</SE>
</COMMON_FPKJ_XMXX>
<COMMON_FPKJ_XMXX>
<FPHXZ>1</FPHXZ>
<SPBM>103011102</SPBM>
<ZXBM></ZXBM>
<YHZCBS>0</YHZCBS>
<LSLBS></LSLBS>
<ZZSTSGL></ZZSTSGL>
<XMMC>水果</XMMC>
<GGXH></GGXH>
<DW></DW>
<XMSL></XMSL>
<XMDJ></XMDJ>
<XMJE>-10</XMJE>
<SL>0.11</SL>
<SE>-1.1</SE>
</COMMON_FPKJ_XMXX>
</COMMON_FPKJ_XMXXS>
</REQUEST_COMMON_FPKJ>
實體類代碼:
namespace CW.HF.HIS.Test
{
[XmlRoot("REQUEST_COMMON_FPKJ")]
public class REQUEST_COMMON
{
[XmlAttribute("class")]
public string _class
{ get; set; } = "REQUEST_COMMON_FPKJ";
private COMMON_FPKJ_FPT commonFpkjFpt = null;
//屬性的定義
[XmlElement("COMMON_FPKJ_FPT")]
public COMMON_FPKJ_FPT COMMON_FPKJ_FPT
{
get
{
if (commonFpkjFpt == null)
{
commonFpkjFpt = new COMMON_FPKJ_FPT();
}
return commonFpkjFpt;
}
set { commonFpkjFpt = value; }
}
private COMMON_FPKJ_XMXXS commonFpkjXmxxs = null;
[XmlElement("COMMON_FPKJ_XMXXS")]
public COMMON_FPKJ_XMXXS COMMON_FPKJ_XMXXS
{
get
{
if (commonFpkjXmxxs == null)
{
commonFpkjXmxxs = new COMMON_FPKJ_XMXXS();
}
return commonFpkjXmxxs;
}
set { commonFpkjXmxxs = value; }
}
}
public class COMMON_FPKJ_FPT
{
[XmlAttribute("class")]
public string _class
{ get; set; } = "COMMON_FPKJ_FPT";
[XmlElement("FPQQLSH")]
public string FPQQLSH { get; set; } = string.Empty;
[XmlElement("DDH")]
public string DDH
{ get; set; } = string.Empty;
[XmlElement("KPLX")]
public string KPLX
{ get; set; } = string.Empty;
[XmlElement("BMB_BBH")]
public string BMB_BBH { get; set; } = string.Empty;
[XmlElement("XSF_NSRSBH")]
public string XSF_NSRSBH
{ get; set; } = string.Empty;
[XmlElement("XSF_MC")]
public string XSF_MC
{ get; set; } = string.Empty;
[XmlElement("XSF_DZDH")]
public string XSF_DZDH { get; set; } = string.Empty;
[XmlElement("XSF_YHZH")]
public string XSF_YHZH
{ get; set; } = string.Empty;
[XmlElement("GMF_NSRSBH")]
public string GMF_NSRSBH
{ get; set; } = string.Empty;
[XmlElement("GMF_MC")]
public string GMF_MC { get; set; } = string.Empty;
[XmlElement("GMF_DZDH")]
public string GMF_DZDH
{ get; set; } = string.Empty;
[XmlElement("GMF_YHZH")]
public string GMF_YHZH
{ get; set; } = string.Empty;
[XmlElement("GMF_SJ")]
public string GMF_SJ
{ get; set; } = string.Empty;
[XmlElement("GMF_EMAIL")]
public string GMF_EMAIL
{ get; set; } = string.Empty;
[XmlElement("KPR")]
public string KPR
{ get; set; } = string.Empty;
[XmlElement("SKR")]
public string SKR
{ get; set; } = string.Empty;
[XmlElement("FHR")]
public string FHR
{ get; set; } = string.Empty;
[XmlElement("YFP_DM")]
public string YFP_DM
{ get; set; } = string.Empty;
[XmlElement("YFP_HM")]
public string YFP_HM
{ get; set; } = string.Empty;
[XmlElement("JSHJ")]
public string JSHJ
{ get; set; } = string.Empty;
[XmlElement("HJJE")]
public string HJJE
{ get; set; } = string.Empty;
[XmlElement("HJSE")]
public string HJSE
{ get; set; } = string.Empty;
[XmlElement("BZ")]
public string BZ
{ get; set; } = string.Empty;
}
public class COMMON_FPKJ_XMXXS
{
[XmlAttribute("class")]
public string _class { get; set; } = "COMMON_FPKJ_XMXX";
[XmlAttribute("size")]
public string size { get; set; }
private List<COMMON_FPKJ_XMXX> commonFpkjXmxxs = null;
[XmlElement("COMMON_FPKJ_XMXX")]
public List<COMMON_FPKJ_XMXX> FPKJ_XMXXs
{
get
{
if (commonFpkjXmxxs == null)
{
commonFpkjXmxxs = new List<COMMON_FPKJ_XMXX>();
}
return commonFpkjXmxxs;
}
set { commonFpkjXmxxs = value; }
}
}
public class COMMON_FPKJ_XMXX
{
[XmlElement("FPHXZ")]
public string FPHXZ { get; set; } = string.Empty;
[XmlElement("SPBM")]
public string SPBM { get; set; } = string.Empty;
[XmlElement("ZXBM")]
public string ZXBM { get; set; } = string.Empty;
[XmlElement("YHZCBS")]
public string YHZCBS { get; set; } = string.Empty;
[XmlElement("LSLBS")]
public string LSLBS { get; set; } = string.Empty;
[XmlElement("ZZSTSGL")]
public string ZZSTSGL { get; set; } = string.Empty;
[XmlElement("XMMC")]
public string XMMC { get; set; } = string.Empty;
[XmlElement("GGXH")]
public string GGXH { get; set; } = string.Empty;
[XmlElement("DW")]
public string DW { get; set; } = string.Empty;
[XmlElement("XMSL")]
public string XMSL { get; set; } = string.Empty;
[XmlElement("XMDJ")]
public string XMDJ { get; set; } = string.Empty;
[XmlElement("XMJE")]
public string XMJE { get; set; } = string.Empty;
[XmlElement("SL")]
public string SL { get; set; } = string.Empty;
[XmlElement("SE")]
public string SE { get; set; } = string.Empty;
}
}
反序列化和序列化代碼網上多的時,就不一 一粘貼了
下面是序列化代碼,檔案頭部結果不包含xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
/// <summary>
/// 序列化
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string SerializeXml(object data)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xz = new XmlSerializer(data.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
xz.Serialize(sw, data, ns);
return sw.ToString();
}
}
下面是另一種序列化代碼,檔案頭部結果包含xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
public static string Serializer(Type type, object obj)
{
MemoryStream Stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(type);
//序列化對象
xml.Serialize(Stream, obj);
Stream.Position = 0;
StreamReader sr = new StreamReader(Stream);
string str = sr.ReadToEnd();
sr.Dispose();
Stream.Dispose();
return str;
}