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タグに基づいて2つのクラスを作成しまし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 に答える