3

我得到了一个 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);

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

4

1 回答 1

-1

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

首先,使用(用于请求和响应)基于 XML 标记创建两个类xsd.exe Test.xsd /c,这样我就不必手动处理 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 类,因为我的成员变量与您的不同。

于 2012-10-24T17:22:13.823 回答