关于将System.IO.Stream
(从方法)和反序列化传递到对象(另一种方法),我有两个具体问题。
我从WebRequest
得到的XML响应(请注意,没有根标签)
<?xml version="1.0" encoding="UTF-8"?>
<response id="-2d953936:14174bb0cf3:-5213">
<date>2013-10-01 12:01:55.532999</date>
<status>
<current>open</current>
<next>after</next>
<change_at>16:00:00</change_at>
</status>
<message>Market is open</message>
<unixtime>1380643315</unixtime>
</response>
方法1 - ResponseMethod - 当前返回字符串
private static string GetResponse(HttpWebRequest request)
{
var v_Response = request.GetResponse();
var v_DataStream = v_Response.GetResponseStream();
var v_Reader = new System.IO.StreamReader(v_DataStream);
var x_XMLResponse = v_Reader.ReadToEnd();
//Close all Stream logic
v_Reader.Close(); v_DataStream.Close(); v_Response.Close();
return x_XMLResponse;
}
方法2 - 将XML转换为对象
// I would use XDocument and Lin2XML to get my typed object - for example MarketStatus
问题是:
StreamReader
传递,然后将其用作方法2的输入以获取我的类型对象。这是一种标准方法还是有更好的方法呢?附加说明:
MarketStatus
Class 任何代码段/建议都会非常感谢
答案 0 :(得分:3)
我们通常使用泛型方法,类似于以下(简化发布),它使用XMLSerializer将XML字符串表示反序列化为相应的对象。
public T ReturnObjectfromXml<T>(string xmlForm)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
StringReader sr = new StringReader(xmlForm);
XmlTextReader xts = new XmlTextReader(sr);
return ((T)xs.Deserialize(xts));
}
希望这会有所帮助。
此致
答案 1 :(得分:0)
看起来你正在做某种类型的message passing。最好使用WCF或ASP.NET Web API,而不是滚动自己的基础结构代码(序列化和反序列化)。
回答问题1:不,最好在完成后立即返回一个字符串并处理它。见When should I dispose my objects in .NET?
对注释1的评论:在大多数情况下,您不希望对序列化/反序列化进行单元测试。