C# 使用XSD和post-to URL创建XML的步骤
我得到了一个XSD文件和示例XML文件,并被要求将XML文件发布到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;
<?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;
}
}