private LiveLoginResult GenerateLoginResultFrom(Stream responseStream)
        {
            IDictionary <string, object> jsonObj;

            try
            {
                using (var reader = new StreamReader(responseStream))
                {
                    var jsReader = new JsonReader(reader.ReadToEnd());
                    jsonObj = jsReader.ReadValue() as IDictionary <string, object>;
                }
            }
            catch (FormatException fe)
            {
                return(new LiveLoginResult(
                           new LiveAuthException(AuthErrorCodes.ServerError, fe.Message)));
            }

            if (jsonObj == null)
            {
                return(new LiveLoginResult(
                           new LiveAuthException(AuthErrorCodes.ServerError, ResourceHelper.GetString("ServerError"))));
            }

            if (jsonObj.ContainsKey(AuthConstants.Error))
            {
                var errorCode = jsonObj[AuthConstants.Error] as string;
                if (errorCode.Equals(AuthErrorCodes.InvalidGrant, StringComparison.Ordinal))
                {
                    return(new LiveLoginResult(LiveConnectSessionStatus.NotConnected, null));
                }

                string errorDescription = string.Empty;
                if (jsonObj.ContainsKey(AuthConstants.ErrorDescription))
                {
                    errorDescription = jsonObj[AuthConstants.ErrorDescription] as string;
                }

                return(new LiveLoginResult(new LiveAuthException(errorCode, errorDescription)));
            }

            LiveConnectSession newSession = LiveAuthClient.CreateSession(this.AuthClient, jsonObj);

            return(new LiveLoginResult(LiveConnectSessionStatus.Connected, newSession));
        }