Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#控制器中序列化xml请求_C#_Xml_Asp.net Mvc_Serialization_Asp.net Core - Fatal编程技术网

在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>

假设我用c编写了这个类模式#

如果我在请求中得到这个xml

<?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();
}