c# - 使用 XSD 创建 XML 并发布到 URL 的步骤

标签 c# asp.net .net xml xsd

我得到了一个 XSD 文件和示例 XML 文件,并被要求将 XML 文件发布到一个 URL。

示例 XML 文件

<?xml version="1.0"?>
<pingRequest>
   <elt></elt>
   ...
</pingRequest>

我熟悉SOAP和REST,但是我从来没有做过直接发布纯XML文件。这是我到目前为止得到的结果。

1) 从XSD文件生成C#类

 xsd.exe Test.xsd /c

2) 使用 XmlSerializer 将 C# 类序列化为 XML

public string SerializeObject(object obj, Type type)
{
    string xml;
    var xs = new XmlSerializer(type);
    using (var ms = new MemoryStream())
    {
        xs.Serialize(ms, obj, null);
        ms.Position = 0;
        using (var sr = new StreamReader(memoryStream))
        {
            xml = sr.ReadToEnd();
        }
    }
    return xml;
}

或者我应该使用 LINQ to XML生成 XML 文件?

3) 使用 WebClient 将 XML 发送到 URL

var client = new WebClient();
var uri = new Uri("http://www.site.com/");
string responseXML = client.UploadString(uri, requestXML);

我在正确的轨道上吗?如果没有,你能给我指出正确的方向吗?提前致谢。

最佳答案

这是我的部分代码,以便其他人可以使用它。

首先,使用 xsd.exe Test.xsd/c 创建了两个基于 XML 标签的类(用于请求和响应),这样我就不必手动修改 XML 文件了。

public pingResponse Send()
{
  var pingRequest = new pingRequest
  {
    myelement = "test"
  };

  // Serialize pingRequest class to xml
  var serializer = new Serializer();
  string requestXml = serializer.SerializeObject(pingRequest, typeof(pingRequest));

  // Post xml
  var client = new WebClient(); 
  var uri = new Uri("http://www.site.com/"); 
  string responseXML = client.UploadString(uri, requestXML); 

  return (pingResponse)serializer.DeserializeObject(xml, typeof(Response));
}


public class Serializer
{
  public string SerializeObject(object obj, Type type)
  {
    var setting = new XmlWriterSettings() {OmitXmlDeclaration = true, Indent = true};
    var xml = new StringBuilder();
    using (var writer = XmlWriter.Create(xml, setting))
    {
      var nsSerializer = new XmlSerializerNamespaces();
      nsSerializer.Add(string.Empty, string.Empty);

      var xmlSerializer = new XmlSerializer(type);
      xmlSerializer.Serialize(writer, obj, nsSerializer);
    }   
    return xml.ToString();
  }

  public object DeserializeObject(string xml, Type type)
  {
    var xs = new XmlSerializer(type);
    var stringReader = new StringReader(xml);
    var obj = xs.Deserialize(stringReader);
    stringReader.Close();
    return obj;
  }
}

注意:我不包括 PingRequest 和 PingResponse 类,因为我的成员变量将与您的不同。

关于c# - 使用 XSD 创建 XML 并发布到 URL 的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12170960/

相关文章:

asp.net - .NET 安全性中“主体”一词的含义是什么?

ASP.NET MVC 3 文件夹结构

C# 创建函数队列

c# - Crystal Reports 的好书?

c# - 在两个数据集中寻找最佳匹配

c# - 如何注册通用服务

c# - 一种转换为对象实际类型的干净方法

.net - 带有 mod_mono 和 mono 的 MySQL Connector 2.6.7

c# - 为什么在 C# 接口(interface)名称前加上 “I”

c# - MySQL 数据对于第 'XX' 行的 'XX' 列太长 - LongBlob 列