Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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# 使用XSD和post-to URL创建XML的步骤_C#_Asp.net_.net_Xml_Xsd - Fatal编程技术网

C# 使用XSD和post-to URL创建XML的步骤

C# 使用XSD和post-to URL创建XML的步骤,c#,asp.net,.net,xml,xsd,C#,Asp.net,.net,Xml,Xsd,我得到了一个XSD文件和示例XML文件,并被要求将XML文件发布到URL 示例XML文件 <?xml version="1.0"?> <pingRequest> <elt></elt> ... </pingRequest> 2) 使用XmlSerializer从C#类序列化为XML public string SerializeObject(object obj, Type type) { string xml;

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

示例XML文件

<?xml version="1.0"?>
<pingRequest>
   <elt></elt>
   ...
</pingRequest>
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;
}
还是应该使用生成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类,因为我的成员变量与您的不一样。

无论以何种方式,这实际上取决于服务器对您的请求的期望,但在这里,我没有看到您提到它。这是一个ping帖子(旧技术,但在某些行业中仍然大量使用)。我添加了示例XML。很抱歉,我似乎有点困惑,我认为您无法生成正确格式的XML,但似乎您只是想知道哪种方式更好,我会选择简单的编码方式,或者使用诸如red gate.net profile之类的工具测试性能,看看哪种方式更快,我的意思是,如果模式发生变化,那么无论采取哪种方式,您都必须以任何方式更改代码,我猜xsd可能会更快,因为我很少看到LINQ比其他方式更快,它使我们编写代码更容易,但占用了更多的CPU时间,因此you@Simon王-谢谢你的意见。我的问题是关于建筑;我想听听其他人对此步骤的解决方案/方法。
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;
  }
}