C# 从httpWebResponse读取json

C# 从httpWebResponse读取json,c#,json,C#,Json,我从httpWebResponse获得了一个json,应该是以下格式: {"d":"{\"Success\":\"\",\"PricedItineraries\":[{\"IsRecommendedFlight\":false,\"BookingClass\":null,\"AirItinerary\":{\"OriginDestinationOptions\":{\"OriginDestinationOption\":[{\"FlightSegment\":[{\"DepartureAirpo

我从
httpWebResponse
获得了一个json,应该是以下格式:

{"d":"{\"Success\":\"\",\"PricedItineraries\":[{\"IsRecommendedFlight\":false,\"BookingClass\":null,\"AirItinerary\":{\"OriginDestinationOptions\":{\"OriginDestinationOption\":[{\"FlightSegment\":[{\"DepartureAirport\":{\"LocationCode\":\"RAK\",\"Terminal\":\"1\"},\"ArrivalAirport\":{\"LocationCode\":\"ORY\",\"Terminal\":\"S\"},\"Equipment\":{\"AirEquipType\":\"73H\",\"ChangeofGauge\":\"true\"},\"MarketingAirline\":{\"Code\":\"TO\",\"CodeContext\":\"KBATO\"},\"OperatingAirline\":{\"Code\":\"TO\"},\"BookingClassAvails\":[{\"ResBookDesigCode\":\"A\",\"RPH\":\"5\"}],\"BagAllownceInfo\":{\"Allowance\":\"00\",\"QuantityCode\":\" N\",\"UnitQualifier\":\" K\"},\"FareID\":\"000000000\",\"Token\":\"00000000-0000-0000-0000-000000000000\",\"AdultBaseFare\":\"0000517.77\",\"AdultTaxFare\":\"0000000.00\",\"ChildBaseFare\":\"0000000.00\",\"ChildTaxFare\":\"0000000.00\",\"InfantBaseFare\":\"0000000.00\",\"InfantTaxFare\":\"0000000.00\",\"PriceTotal\":\"0000307.90\",\"LFID\":\"0000000\",\"PFID\":\"00000\",\"PTFID\":\"
我尝试使用
JSonConverter
反序列化json,但它返回的流不可读:

public static object DeserializeFromStream(Stream stream)
{
    var serializer = new JsonSerializer();

    using (var sr = new StreamReader(stream))
    using (var jsonTextReader = new JsonTextReader(sr))
    {
        return serializer.Deserialize(jsonTextReader);
    }
}
因此,我正在阅读我的
httpwebresponse

using (StreamReader Reader = new StreamReader(ResStream))
{
    this.ResponseHTML = Reader.ReadToEnd();
}
但不知怎的,它又回来了:

?W?S???"??yE,?????♣*Ay◄?lA+??F◄K?\?b;^~§????xN?yU,6U,?☺♣U,T??O?♠V►R?B§??*????↨??
e?-|T?P?b???s§???M§♂U,?'??*?^le?????▬????§%7↕???f??Qd←|?c♣??
bq7;???ffv%)?▬??↔L6???s?V?~?#?$♀]☺◄????D????'X?e?_?????"??E??Q]E,Ad-?   ♥?Xb'??K
[???y;?d"0??:?-X??←Xòs←▬?→?$?↑-b☼}E,???"??MF??j↨??;vb)?aq?ai???R?.5,???????→▬jX?
♂5,?↑j??P?2?→?????+5,?tu?#??ev??☺7;???o☺??3w???P?B
w???E?4!?→??MF??j??v?→▬?→???]jX?I?R???⌂?i]?5,a↕☼↓????→▬???kX??mjX?a◄1?♥'P?;??(??
♂??????H?aq??→▬??↑e???[§???%M?.^??}X???z??t??an?→▬c????_~Z?→▬jX?a?gZ?→▬jX?a?????
♂5,?↑j??P?2?→▬?a)Y??a????>,
5,??a?P?Ro▼▬?→???]jX?I????%t-jX8K?→▬jXLI?a?,!jX??%??PO??P?R?f???↔/4?f?c?7;?jX6?L
我正在发送webrequest:

 public Response Send()
        {
            if (REQUEST == null)
                return new Response(REQUEST) { HTTPStatusCode = "999" }; 

            WebResponse Res = null;
            CookieContainer Cookies = new CookieContainer();
            if (REQUEST.Cookies != null)
            {
                Cookies = REQUEST.Cookies;
            }
            bool isdone = true;
            DateTime Time = default(DateTime);
            Sender = (HttpWebRequest)WebRequest.Create(this.REQUEST._url);
            Sender.Host = REQUEST.Host;
            Sender.Accept = REQUEST.Accept;
            Sender.Method = REQUEST.Method;
            Sender.UserAgent = REQUEST.UserAgent;
            Sender.ContentType = REQUEST.ContentType;
            Sender.CookieContainer = Cookies;
            Sender.Referer = REQUEST.Refer;

            if (REQUEST.Data != null && REQUEST.Data.Length > 0)
            {
                using (var writer = new StreamWriter(Sender.GetRequestStream()))
                {
                    writer.Write(REQUEST.Data);
                    writer.Flush();
                    writer.Close();
                }
            }

            try
            {
                Res = Sender.GetResponse();
                Time = DateTime.Now;
            }
            catch (Exception Ex)
            {
                isdone = false;
                if (OnExceptionHappened != null)
                    OnExceptionHappened(this, new ExceptionArgs { Msg = Ex.Message, Sender = this, Time = DateTime.Now });
            }

            return AssignWebResponse((HttpWebResponse)Res, isdone, Time, Cookies, Sender.RequestUri.AbsoluteUri);
        }
请求:

        var REQUEST = new Request()
        {
            _url = "https://www.example.com/",
            Host = "host",
            Method = "POST",
            Refer = "refer",
            UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0",
            ContentType = "application/json",
            Cookies = CurrentContainer,
            Data = "{ 'isFromCache': 'undefined', 'pageNumber': '1'}",
            isJson = true
        };
        using (BeRequest.CORE.BeRequest Req = new BeRequest.CORE.BeRequest(REQUEST))
        {
            Req.OnExceptionHappened += Req_OnExceptionHappened;
            var response = Req.Send();

            return response.ResponseHTML;
        }
只要做:

using (StreamReader Reader = new StreamReader(Res.GetResponseStream()))
{
    var myObject = JsonConvert.DeserializeObject<YourClass>(Reader.ReadToEnd());
}
使用(StreamReader=newstreamreader(Res.GetResponseStream())
{
var myObject=JsonConvert.DeserializeObject(Reader.ReadToEnd());
}

你的代码到处都是。但是假设
Res
WebResponse
类型,那么它应该可以工作。

我得到一个异常:
解析值时遇到意外字符:。路径“”,第0行,位置0。
什么类型是ResStream?可能会显示更多的代码。所以基本上您希望将json解析为c#中的对象。。。。我说的对吗?是的,但我相信流并没有被正确读取看起来像是压缩响应,请参阅。不管怎样,还是要使用HttpClient,它可以开箱即用,还可以为您反序列化JSON。@CodeCaster我尝试使用Burpsuit发送请求,结果格式正确。那么?HttpWebRequest不是Burp套件。阅读我评论中链接的问题。