XML 和 SOAP 序列化
1、Controller
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using Microsoft.AspNetCore.Mvc;
namespace WebApplication.Controllers
{
[Route("[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet("e")]
public IActionResult e()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\5.xml");//Load加载XML文件,LoadXML加载XML字符串
PRPM_IN406110UV01 xml1 = XmlUtil.XmlDeserialize<PRPM_IN406110UV01>(xmlDoc.InnerXml, Encoding.UTF8);
return Ok(new { data = xml1 });
}
}
}
2、5.xml文件【不能带有xsi:type="***"相关内容,如果有请替换掉】
<PRPM_IN406110UV01>
<receiver typeCode="RCV">
<device classCode="DEV" determinerCode="INSTANCE"></device>
</receiver>
<sender typeCode="SND">
<device classCode="DEV" determinerCode="INSTANCE"></device>
</sender>
<acknowledgement typeCode="AA"></acknowledgement>
<controlActProcess classCode="CACT" moodCode="EVN">
<subject typeCode="SUBJ">
<registrationEvent classCode="REG" moodCode="EVN">
<statusCode code="active"/>
<subject1 typeCode="SBJ">
<assignedEntity classCode="ASSIGNED ">
<id>
<item extension="0157" root="2.16.156.10011.1.26"/>
</id>
<name>
<item>
<part value="123"/>
</item>
</name>
<statusCode code="active"/>
<assignedPrincipalOrganization classCode="ORG" determinerCode="INSTANCE">
<name>
<item>
<part value="456"/>
</item>
</name>
</assignedPrincipalOrganization>
</assignedEntity>
</subject1>
</registrationEvent>
</subject>
</controlActProcess>
</PRPM_IN406110UV01>
3、实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace WebApplication
{
//[XmlType(TypeName = "PRPM_IN406110UV01")]
[XmlRoot("PRPM_IN406110UV01")]
public class PRPM_IN406110UV01
{
public Receiver receiver { get; set; }
public Sender sender { get; set; }
public Acknowledgement acknowledgement { get; set; }
[XmlArray("controlActProcess")]
public List<Subject> controlActProcess { get; set; }
}
[XmlType(TypeName = "receiver")]
public class Receiver
{
[XmlAttribute]
public string typeCode { get; set; }
public Device device { get; set; }
}
[XmlType(TypeName = "sender")]
public class Sender
{
[XmlAttribute]
public string typeCode { get; set; }
public Device device { get; set; }
}
#region Device
[XmlType(TypeName = "device")]
public class Device
{
[XmlAttribute]
public string classCode { get; set; }
[XmlAttribute]
public string determinerCode { get; set; }
public DeviceId id { get; set; }
}
[XmlType(TypeName = "id")]
public class DeviceId
{
public DeviceIdItem item { get; set; }
}
[XmlType(TypeName = "item")]
public class DeviceIdItem
{
[XmlAttribute]
public string extension { get; set; }
[XmlAttribute]
public string root { get; set; }
}
#endregion
#region controlActProcess
[XmlType(TypeName = "controlActProcess")]
public class ControlActProcess
{
[XmlAttribute]
public string classCode { get; set; }
[XmlAttribute]
public string moodCode { get; set; }
//[XmlArray("subject")]
[XmlElement]
public List<Subject> subject { get; set; }
}
[XmlType(TypeName = "subject")]
public class Subject
{
[XmlAttribute]
public string typeCode { get; set; }
public RegistrationEvent registrationEvent { get; set; }
}
[XmlType(TypeName = "registrationEvent")]
public class RegistrationEvent
{
[XmlAttribute]
public string classCode { get; set; }
[XmlAttribute]
public string moodCode { get; set; }
public StatusCode statusCode { get; set; }
public Subject1 subject1 { get; set; }
}
[XmlType(TypeName = "statusCode")]
public class StatusCode
{
[XmlAttribute]
public string code { get; set; }
}
#region Subject1
[XmlType(TypeName = "subject1")]
public class Subject1
{
[XmlAttribute]
public string typeCode { get; set; }
public Subject1AssignedEntity assignedEntity { get; set; }
}
#region Subject1AassignedEntity
[XmlType(TypeName = "assignedEntity")]
public class Subject1AssignedEntity
{
[XmlAttribute]
public string classCode { get; set; }
public Subject1AssignedId id { get; set; }
public Subject1AssignedCode code { get; set; }
public Subject1AssignedName name { get; set; }
public Subject1AssignedAssignedPrincipalOrganization assignedPrincipalOrganization { get; set; }
}
//[XmlType(TypeName = "id")]
public class Subject1AssignedId
{
public Subject1AssignedIdItem item { get; set; }
}
//[XmlType(TypeName = "item")]
public class Subject1AssignedIdItem
{
[XmlAttribute]
public string extension { get; set; }
[XmlAttribute]
public string root { get; set; }
}
#endregion
#region Subject1AssignedCode
[XmlType(TypeName = "code")]
public class Subject1AssignedCode
{
[XmlAttribute]
public string code { get; set; }
[XmlAttribute]
public string codeSystem { get; set; }
[XmlAttribute]
public string codeSystemName { get; set; }
public Subject1AssignedCodeDisplayName displayName { get; set; }
}
[XmlType(TypeName = "displayName")]
public class Subject1AssignedCodeDisplayName
{
[XmlAttribute]
public string value { get; set; }
}
#endregion
//[XmlType(TypeName = "name")]
public class Subject1AssignedName
{
public Subject1AssignedNameItem item { get; set; }
}
//[XmlType(TypeName = "item")]
public class Subject1AssignedNameItem
{
public Subject1AssignedNameItemPart part { get; set; }
}
//[XmlType(TypeName = "assignedPrincipalOrganization")]
public class Subject1AssignedAssignedPrincipalOrganization
{
[XmlAttribute]
public string classCode { get; set; }
[XmlAttribute]
public string determinerCode { get; set; }
}
[XmlType(TypeName = "part")]
public class Subject1AssignedNameItemPart
{
[XmlAttribute]
public string value { get; set; }
}
#endregion
#endregion
#region Acknowledgement
[XmlType(TypeName = "acknowledgement")]
public class Acknowledgement
{
[XmlAttribute]
public string typeCode { get; set; }
}
#endregion
}
4、XmlUtil
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace WebApplication
{
public static class XmlUtil
{
/// <summary>
/// 将一个对象序列化为XML字符串
/// </summary>
/// <param name="o">要序列化的对象</param>
/// <param name="encoding">编码方式</param>
/// <returns>序列化产生的XML字符串</returns>
public static string XmlSerialize(object o, Encoding encoding)
{
if (o == null)
{
throw new ArgumentNullException("o");
}
if (encoding == null)
{
throw new ArgumentNullException("encoding");
}
using (MemoryStream stream = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineChars = "\r\n";
settings.Encoding = encoding;
settings.IndentChars = " ";
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
//Create our own namespaces for the output
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
//Add an empty namespace and empty value
ns.Add("", "");
serializer.Serialize(writer, o, ns);
writer.Close();
}
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream, encoding))
{
return reader.ReadToEnd();
}
}
}
/// <summary>
/// 从XML字符串中反序列化对象
/// </summary>
/// <typeparam name="T">结果对象类型</typeparam>
/// <param name="s">包含对象的XML字符串</param>
/// <param name="encoding">编码方式</param>
/// <returns>反序列化得到的对象</returns>
public static T XmlDeserialize<T>(string s, Encoding encoding)
{
if (string.IsNullOrEmpty(s))
throw new ArgumentNullException("s");
if (encoding == null)
throw new ArgumentNullException("encoding");
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s)))
{
using (StreamReader sr = new StreamReader(ms, encoding))
{
return (T)mySerializer.Deserialize(sr);
}
}
}
/// <summary>
/// 将一个对象按XML序列化的方式写入到一个文件
/// </summary>
/// <param name="o">要序列化的对象</param>
/// <param name="path">保存文件路径</param>
/// <param name="encoding">编码方式</param>
public static void XmlSerializeToFile(object o, string path, Encoding encoding)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
}
if (o == null)
{
throw new ArgumentNullException("o");
}
if (encoding == null)
{
throw new ArgumentNullException("encoding");
}
using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write))
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineChars = "\r\n";
settings.Encoding = encoding;
settings.IndentChars = " ";
using (XmlWriter writer = XmlWriter.Create(file, settings))
{
serializer.Serialize(writer, o);
writer.Close();
}
}
}
/// <summary>
/// 读入一个文件,并按XML的方式反序列化对象。
/// </summary>
/// <typeparam name="T">结果对象类型</typeparam>
/// <param name="path">文件路径</param>
/// <param name="encoding">编码方式</param>
/// <returns>反序列化得到的对象</returns>
public static T XmlDeserializeFromFile<T>(string path, Encoding encoding)
{
if (string.IsNullOrEmpty(path))
throw new ArgumentNullException("path");
if (encoding == null)
throw new ArgumentNullException("encoding");
string xml = File.ReadAllText(path, encoding);
return XmlDeserialize<T>(xml, encoding);
}
}
}
5、Json数据
{
"data": {
"receiver": {
"typeCode": "RCV",
"device": {
"classCode": "DEV",
"determinerCode": "INSTANCE",
"id": null
}
},
"sender": {
"typeCode": "SND",
"device": {
"classCode": "DEV",
"determinerCode": "INSTANCE",
"id": null
}
},
"acknowledgement": {
"typeCode": "AA"
},
"controlActProcess": [
{
"typeCode": "SUBJ",
"registrationEvent": {
"classCode": "REG",
"moodCode": "EVN",
"statusCode": {
"code": "active"
},
"subject1": {
"typeCode": "SBJ",
"assignedEntity": {
"classCode": "ASSIGNED ",
"id": {
"item": {
"extension": "0157",
"root": "2.16.156.10011.1.26"
}
},
"code": null,
"name": {
"item": {
"part": {
"value": "儿科门诊"
}
}
},
"assignedPrincipalOrganization": {
"classCode": "ORG",
"determinerCode": "INSTANCE"
}
}
}
}
}
]
}
}
*
*
*