Beispiel #1
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            SearchContinuationToken token = (SearchContinuationToken)value;

            var payload =
                new SearchContinuationTokenPayload()
            {
                NextLink           = token.NextLink,
                NextPageParameters = token.NextPageParameters
            };

            serializer.Serialize(writer, payload);
        }
        public override object ReadJson(
            JsonReader reader,
            Type objectType,
            object existingValue,
            JsonSerializer serializer)
        {
            SearchContinuationTokenPayload payload = serializer.Deserialize <SearchContinuationTokenPayload>(reader);

            Uri nextLinkUri;

            try
            {
                nextLinkUri = new Uri(payload.NextLink);
            }
            catch (FormatException e)
            {
                throw new JsonSerializationException(
                          "Cannot deserialize continuation token. Failed to parse nextLink because it is not a valid URL.",
                          e);
            }

            string apiVersion = ParseApiVersion(nextLinkUri.Query);

            if (string.IsNullOrWhiteSpace(apiVersion))
            {
                throw new JsonSerializationException(
                          "Cannot deserialize continuation token because the api-version is missing.");
            }

            if (apiVersion != Consts.TargetApiVersion)
            {
                const string MessageFormat =
                    "Cannot deserialize a continuation token for a different api-version. Token contains version " +
                    "'{0}'; Expected version '{1}'.";

                string message = string.Format(MessageFormat, apiVersion, Consts.TargetApiVersion);
                throw new JsonSerializationException(message);
            }

            return(new SearchContinuationToken(payload.NextLink, payload.NextPageParameters));
        }