将流数据转换为C#.net中的自定义对象
我想将响应流中的流数据转换为自定义对象 我想将respose流转换为自定义对象,我将遵循以下步骤 我的代码如下将流数据转换为C#.net中的自定义对象,c#,C#,我想将响应流中的流数据转换为自定义对象 我想将respose流转换为自定义对象,我将遵循以下步骤 我的代码如下 myMethod() { state s = new state(); Stream receiveStream; StreamReader readStream; HttpWebRequest request; HttpWebResponse response; try { requ
myMethod()
{
state s = new state();
Stream receiveStream;
StreamReader readStream;
HttpWebRequest request;
HttpWebResponse response;
try
{
request = (HttpWebRequest)WebRequest.Create (url);
request.Method = "GET";
request.ContentType = "application/json";
response = (HttpWebResponse)request.GetResponse ();
receiveStream = response.GetResponseStream();
readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());
serializer = new DataContractJsonSerializer(typeof(state));
s = serializer.ReadObject(readStream.BaseStream)as state;
Console.Write(s.name+"\n");
response.Close ();
readStream.Close ();
}
catch (Exception ex)
{
}
}
对象s不返回任何内容。
有人能帮我吗?问题是,在您事先已经从对象中读取了所有数据的情况下,您正在尝试反序列化对象:
readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());
在这些行之后,流将是空的,因此没有什么要反序列化的。去掉这些行(然后使用下面的receiveStream
),您可能会发现它很管用
此外,还有一些建议:
- 使用
语句而不是显式关闭流
- 使用语句为响应本身添加一个
,因为它实现了
IDisposable
- 保持每个变量的作用域尽可能小,在声明点指定一个值
- 捕获
很少是一个好主意,而且以您正在做的方式吞下异常,而不进行日志记录等,几乎从来都不是一个好主意异常
- 遵循.NET命名约定,其中
将是状态
(并且可能会使名称更具描述性)状态
- 使用强制转换,而不是像那样使用
-有关原因,请参阅
readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());
在这些行之后,流将是空的,因此没有什么要反序列化的。去掉这些行(然后使用下面的receiveStream
),您可能会发现它很管用
此外,还有一些建议:
- 使用
语句而不是显式关闭流
- 使用语句为响应本身添加一个
,因为它实现了
IDisposable
- 保持每个变量的作用域尽可能小,在声明点指定一个值
- 捕获
很少是一个好主意,而且以您正在做的方式吞下异常,而不进行日志记录等,几乎从来都不是一个好主意异常
- 遵循.NET命名约定,其中
将是状态
(并且可能会使名称更具描述性)状态
- 使用强制转换,而不是像那样使用
-有关原因,请参阅