将流数据转换为C#.net中的自定义对象

时间:2013-12-16 06:45:10

标签: c#

我想将流数据从响应流转换为自定义对象。

我想将respose流转换为自定义对象,我正在执行这些步骤。

我的代码如下。

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 什么都不返回。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

问题在于,当您事先已经从中读取了所有数据时,您正在尝试反序列化对象:

readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());

在这些行之后,流将为空,因此无需反序列化。摆脱这些线(然后使用下面的receiveStream),你可能会发现它只是有效。

此外,还有一些建议:

  • 不是明确关闭流,而是使用using语句
  • 为响应本身添加using语句,因为它实现了IDisposable
  • 保持每个变量的范围尽可能小,在声明点指定一个值
  • 抓住Exception并不是一个好主意,并且几乎永远一个好主意只是以你正在做的方式吞下异常,没有记录等
  • 遵循.NET命名约定,其中stateState(并且可能使名称更具描述性)
  • 使用演员而非as - 请参阅my blog post on the topic了解原因