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

将流数据转换为C#.net中的自定义对象,c#,C#,我想将响应流中的流数据转换为自定义对象 我想将respose流转换为自定义对象,我将遵循以下步骤 我的代码如下 myMethod() { state s = new state(); Stream receiveStream; StreamReader readStream; HttpWebRequest request; HttpWebResponse response; try { requ

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

我想将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不返回任何内容。
有人能帮我吗?

问题是,在您事先已经从对象中读取了所有数据的情况下,您正在尝试反序列化对象:

readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());
在这些行之后,流将是空的,因此没有什么要反序列化的。去掉这些行(然后使用下面的
receiveStream
),您可能会发现它很管用

此外,还有一些建议:

  • 使用
    语句而不是显式关闭流
  • 使用语句为响应本身添加一个
    ,因为它实现了
    IDisposable
  • 保持每个变量的作用域尽可能小,在声明点指定一个值
  • 捕获
    异常
    很少是一个好主意,而且以您正在做的方式吞下异常,而不进行日志记录等,几乎从来都不是一个好主意
  • 遵循.NET命名约定,其中
    状态
    将是
    状态
    (并且可能会使名称更具描述性)
  • 使用强制转换,而不是像那样使用
    -有关原因,请参阅

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

readStream = new StreamReader(receiveStream);
Console.WriteLine (readStream.ReadToEnd());
在这些行之后,流将是空的,因此没有什么要反序列化的。去掉这些行(然后使用下面的
receiveStream
),您可能会发现它很管用

此外,还有一些建议:

  • 使用
    语句而不是显式关闭流
  • 使用语句为响应本身添加一个
    ,因为它实现了
    IDisposable
  • 保持每个变量的作用域尽可能小,在声明点指定一个值
  • 捕获
    异常
    很少是一个好主意,而且以您正在做的方式吞下异常,而不进行日志记录等,几乎从来都不是一个好主意
  • 遵循.NET命名约定,其中
    状态
    将是
    状态
    (并且可能会使名称更具描述性)
  • 使用强制转换,而不是像那样使用
    -有关原因,请参阅

你所说的“不退”是什么意思?返回空引用,或者返回对所有内容都为空的对象的引用?(顺便说一句,我建议您使用强制转换,而不是像那样使用。)它返回空引用。我按照你说的做了更改,但仍然得到了空引用。你收到的数据是什么样子的?(我注意到您正在设置请求内容类型,但实际上没有提供任何内容,这很奇怪……)您所说的“不返回任何内容”是什么意思?返回空引用,或者返回对所有内容都为空的对象的引用?(顺便说一句,我建议您使用强制转换,而不是像
那样使用。)它返回空引用。我按照你说的做了更改,但仍然得到了空引用。你收到的数据是什么样子的?(我注意到您正在设置请求内容类型,但实际上没有提供任何内容,这很奇怪…)