在c#控制器中序列化xml请求
假设我用c编写了这个类模式# 如果我在请求中得到这个xml在c#控制器中序列化xml请求,c#,xml,asp.net-mvc,serialization,asp.net-core,C#,Xml,Asp.net Mvc,Serialization,Asp.net Core,假设我用c编写了这个类模式# 如果我在请求中得到这个xml <?xml version="1.0" encoding="UTF-8"?> <DataCenter> <ImageServer> <ip>92.82.13.1</ip> <name>image server</name> <imageNumber>50</imageNumber>
<?xml version="1.0" encoding="UTF-8"?>
<DataCenter>
<ImageServer>
<ip>92.82.13.1</ip>
<name>image server</name>
<imageNumber>50</imageNumber>
</ImageServer>
<FeedServer>
<ip>82.25.87.7</ip>
<name>feed server</name>
</FeedServer>
</DataCenter>
92.82.13.1
图像服务器
50
82.25.87.7
提要服务器
是否可以序列化到此类架构?什么是XMLroot,XMLattributes。。。我的课堂上需要什么
如果我没有引用服务器A和服务器B的名称,我如何区分它们之间的区别
控制器代码
[HttpPost("CheckSlip")]
public async Task<bool> SaveServers([FromBody] DataCenter dataCenter)
{
// code
}
[HttpPost(“支票单”)]
公共异步任务存储服务器([FromBody]数据中心数据中心)
{
//代码
}
数据中心为空。。。每当我必须处理XML序列化时,我都无法序列化它,我过去常常将XML文件转换为C类。此工具可能对您有用: 之后,您可以使用此方法将C#类转换为XML,反之亦然:
关于您的问题,您只需对
null
检查进行一些编码。这是与编码逻辑相关的,没有其他方法可以实现您的目标。每当我必须处理XML序列化时,我总是将XML文件转换为C#类。此工具可能对您有用:
之后,您可以使用此方法将C#类转换为XML,反之亦然:
关于您的问题,您只需对
null
检查进行一些编码。这是与编码逻辑相关的,没有其他方法可以实现您的目标。类结构和XML序列化属性必须反映XML才能工作。手动创建这些类可能是一项非常耗时的任务
我发现最简单的方法是让VisualStudio为您生成类。
我在下面列出了一个在本地有效的快速示例
首先。复制要反序列化的XML。然后在visual studio中添加新的空白类,然后选择编辑-->粘贴特殊-->粘贴XML作为类
这将生成以下类
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class DataCenter
{
private DataCenterImageServer imageServerField;
private DataCenterFeedServer feedServerField;
/// <remarks/>
public DataCenterImageServer ImageServer
{
get
{
return this.imageServerField;
}
set
{
this.imageServerField = value;
}
}
/// <remarks/>
public DataCenterFeedServer FeedServer
{
get
{
return this.feedServerField;
}
set
{
this.feedServerField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class DataCenterImageServer
{
private string ipField;
private string nameField;
private byte imageNumberField;
/// <remarks/>
public string ip
{
get
{
return this.ipField;
}
set
{
this.ipField = value;
}
}
/// <remarks/>
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
/// <remarks/>
public byte imageNumber
{
get
{
return this.imageNumberField;
}
set
{
this.imageNumberField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class DataCenterFeedServer
{
private string ipField;
private string nameField;
/// <remarks/>
public string ip
{
get
{
return this.ipField;
}
set
{
this.ipField = value;
}
}
/// <remarks/>
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类数据中心
{
专用数据中心ImageServer imageServerField;
专用数据中心FeedServer feedServerField;
///
公共数据中心ImageServer ImageServer
{
得到
{
返回此.imageServerField;
}
设置
{
this.imageServerField=值;
}
}
///
公共数据中心FeedServer FeedServer
{
得到
{
返回此.feedServerField;
}
设置
{
this.feedServerField=值;
}
}
}
///
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类DataCenterImageServer
{
私有字符串字段;
私有字符串名称字段;
专用字节imageNumberField;
///
公共字符串ip
{
得到
{
返回此.ipField;
}
设置
{
this.ipField=值;
}
}
///
公共字符串名
{
得到
{
返回此.nameField;
}
设置
{
this.nameField=值;
}
}
///
公共字节映像号
{
得到
{
返回此.imageNumberField;
}
设置
{
this.imageNumberField=值;
}
}
}
///
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类DataCenterFeedServer
{
私有字符串字段;
私有字符串名称字段;
///
公共字符串ip
{
得到
{
返回此.ipField;
}
设置
{
this.ipField=值;
}
}
///
公共字符串名
{
得到
{
返回此.nameField;
}
设置
{
this.nameField=值;
}
}
}
然后创建XMLSerializer的实例并反序列化xml。对于这个exmaple,我将XML放在字符串var中
var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataCenter>\r\n <ImageServer>\r\n <ip>92.82.13.1</ip>\r\n <name>image server</name>\r\n <imageNumber>50</imageNumber>\r\n </ImageServer>\r\n <FeedServer>\r\n <ip>82.25.87.7</ip>\r\n <name>feed server</name>\r\n </FeedServer>\r\n</DataCenter>";
XmlSerializer s = new XmlSerializer(typeof(DataCenter));
using (var reader = new StringReader(xml))
{
var item = (DataCenter)s.Deserialize(reader);
}
var xml=“\r\n\r\n\r\n 92.82.13.1\r\n图像服务器\r\n 50\r\n\r\n\r\n 82.25.87.7\r\n提要服务器\r\n\r\n”;
XmlSerializer s=新的XmlSerializer(typeof(数据中心));
使用(var reader=newstringreader(xml))
{
var item=(数据中心)s.反序列化(读取器);
}
现在您将拥有一个表示XML有效负载的对象。
希望这有助于类结构和XML序列化属性必须反映XML才能正常工作。手动创建这些类可能是一项非常耗时的任务 我发现最简单的方法是让VisualStudio为您生成类。 我在下面列出了一个在本地有效的快速示例 首先。复制要反序列化的XML。然后在visual studio中添加新的空白类,然后选择编辑-->粘贴特殊-->粘贴XML作为类 这将生成以下类
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class DataCenter
{
private DataCenterImageServer imageServerField;
private DataCenterFeedServer feedServerField;
/// <remarks/>
public DataCenterImageServer ImageServer
{
get
{
return this.imageServerField;
}
set
{
this.imageServerField = value;
}
}
/// <remarks/>
public DataCenterFeedServer FeedServer
{
get
{
return this.feedServerField;
}
set
{
this.feedServerField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class DataCenterImageServer
{
private string ipField;
private string nameField;
private byte imageNumberField;
/// <remarks/>
public string ip
{
get
{
return this.ipField;
}
set
{
this.ipField = value;
}
}
/// <remarks/>
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
/// <remarks/>
public byte imageNumber
{
get
{
return this.imageNumberField;
}
set
{
this.imageNumberField = value;
}
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class DataCenterFeedServer
{
private string ipField;
private string nameField;
/// <remarks/>
public string ip
{
get
{
return this.ipField;
}
set
{
this.ipField = value;
}
}
/// <remarks/>
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类数据中心
{
专用数据中心ImageServer imageServerField;
专用数据中心FeedServer feedServerField;
///
公共数据中心ImageServer ImageServer
{
public class DataCenter
{
public ImageServer ImageServer { get; set; }
public FeedServer FeedServer { get; set; }
}
public class DataCenter
{
public Server ImageServer { get; set; }
public Server FeedServer{ get; set; }
}
[HttpPost]
public IActionResult SaveServers([FromBody]DataCenter dataCenter)
{
var img = dataCenter.ImageServer as ImageServer;
return Ok();
}