コード例 #1
0
        public void YahooFinance()
        {
            JObject o =
                new JObject(
                    new JProperty("Test1", new DateTime(2000, 10, 15, 5, 5, 5, DateTimeKind.Utc)),
                    new JProperty("Test2", new DateTimeOffset(2000, 10, 15, 5, 5, 5, new TimeSpan(11, 11, 0))),
                    new JProperty("Test3", "Test3Value"),
                    new JProperty("Test4", null)
                    );

            using (JTokenReader jsonReader = new JTokenReader(o))
            {
                IJsonLineInfo lineInfo = jsonReader;

                jsonReader.Read();
                Assert.Equal(JsonToken.StartObject, jsonReader.TokenType);
                Assert.Equal(false, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test1", jsonReader.Value);
                Assert.Equal(false, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(JsonToken.Date, jsonReader.TokenType);
                Assert.Equal(new DateTime(2000, 10, 15, 5, 5, 5, DateTimeKind.Utc), jsonReader.Value);
                Assert.Equal(false, lineInfo.HasLineInfo());
                Assert.Equal(0, lineInfo.LinePosition);
                Assert.Equal(0, lineInfo.LineNumber);

                jsonReader.Read();
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test2", jsonReader.Value);

                jsonReader.Read();
                Assert.Equal(JsonToken.Date, jsonReader.TokenType);
                Assert.Equal(new DateTimeOffset(2000, 10, 15, 5, 5, 5, new TimeSpan(11, 11, 0)), jsonReader.Value);

                jsonReader.Read();
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test3", jsonReader.Value);

                jsonReader.Read();
                Assert.Equal(JsonToken.String, jsonReader.TokenType);
                Assert.Equal("Test3Value", jsonReader.Value);

                jsonReader.Read();
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test4", jsonReader.Value);

                jsonReader.Read();
                Assert.Equal(JsonToken.Null, jsonReader.TokenType);
                Assert.Equal(null, jsonReader.Value);

                Assert.True(jsonReader.Read());
                Assert.Equal(JsonToken.EndObject, jsonReader.TokenType);

                Assert.False(jsonReader.Read());
                Assert.Equal(JsonToken.None, jsonReader.TokenType);
            }

            using (JsonReader jsonReader = new JTokenReader(o.Property("Test2")))
            {
                Assert.True(jsonReader.Read());
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test2", jsonReader.Value);

                Assert.True(jsonReader.Read());
                Assert.Equal(JsonToken.Date, jsonReader.TokenType);
                Assert.Equal(new DateTimeOffset(2000, 10, 15, 5, 5, 5, new TimeSpan(11, 11, 0)), jsonReader.Value);

                Assert.False(jsonReader.Read());
                Assert.Equal(JsonToken.None, jsonReader.TokenType);
            }
        }
コード例 #2
0
        public void ReadBytesFailure()
        {
            AssertException.Throws<JsonReaderException>(() =>
            {
                JObject o =
                    new JObject(
                        new JProperty("Test1", 1)
                        );

                using (JTokenReader jsonReader = new JTokenReader(o))
                {
                    jsonReader.Read();
                    Assert.Equal(JsonToken.StartObject, jsonReader.TokenType);

                    jsonReader.Read();
                    Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                    Assert.Equal("Test1", jsonReader.Value);

                    jsonReader.ReadAsBytes();
                }
            }, "Error reading bytes. Unexpected token: Integer. Path 'Test1'.");
        }
コード例 #3
0
        public void ReadBytesFromEmptyString()
        {
            var bytes = new HasBytes { Bytes = new byte[0] };
            var json = JsonConvert.SerializeObject(bytes);

            TextReader textReader = new StringReader(json);
            JsonReader jsonReader = new JsonTextReader(textReader);

            var jToken = JToken.ReadFrom(jsonReader);

            jsonReader = new JTokenReader(jToken);

            var result2 = (HasBytes)JsonSerializer.Create(null)
                .Deserialize(jsonReader, typeof(HasBytes));

            Assert.Equal(new byte[0], result2.Bytes);
        }
コード例 #4
0
        public void ReadBytes()
        {
            byte[] data = Encoding.UTF8.GetBytes("Hello world!");

            JObject o =
                new JObject(
                    new JProperty("Test1", data)
                    );

            using (JTokenReader jsonReader = new JTokenReader(o))
            {
                jsonReader.Read();
                Assert.Equal(JsonToken.StartObject, jsonReader.TokenType);

                jsonReader.Read();
                Assert.Equal(JsonToken.PropertyName, jsonReader.TokenType);
                Assert.Equal("Test1", jsonReader.Value);

                byte[] readBytes = jsonReader.ReadAsBytes();
                Assert.Equal(data, readBytes);

                Assert.True(jsonReader.Read());
                Assert.Equal(JsonToken.EndObject, jsonReader.TokenType);

                Assert.False(jsonReader.Read());
                Assert.Equal(JsonToken.None, jsonReader.TokenType);
            }
        }
コード例 #5
0
        public void ReadLineInfo()
        {
            string input = @"{
  CPU: 'Intel',
  Drives: [
    'DVD read/writer',
    ""500 gigabyte hard drive""
  ]
}";

            StringReader sr = new StringReader(input);

            JObject o = JObject.Parse(input);

            using (JTokenReader jsonReader = new JTokenReader(o))
            {
                IJsonLineInfo lineInfo = jsonReader;

                Assert.Equal(jsonReader.TokenType, JsonToken.None);
                Assert.Equal(0, lineInfo.LineNumber);
                Assert.Equal(0, lineInfo.LinePosition);
                Assert.Equal(false, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.StartObject);
                Assert.Equal(1, lineInfo.LineNumber);
                Assert.Equal(1, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.PropertyName);
                Assert.Equal(jsonReader.Value, "CPU");
                Assert.Equal(2, lineInfo.LineNumber);
                Assert.Equal(7, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.String);
                Assert.Equal(jsonReader.Value, "Intel");
                Assert.Equal(2, lineInfo.LineNumber);
                Assert.Equal(15, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.PropertyName);
                Assert.Equal(jsonReader.Value, "Drives");
                Assert.Equal(3, lineInfo.LineNumber);
                Assert.Equal(10, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.StartArray);
                Assert.Equal(3, lineInfo.LineNumber);
                Assert.Equal(12, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.String);
                Assert.Equal(jsonReader.Value, "DVD read/writer");
                Assert.Equal(4, lineInfo.LineNumber);
                Assert.Equal(22, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.String);
                Assert.Equal(jsonReader.Value, "500 gigabyte hard drive");
                Assert.Equal(5, lineInfo.LineNumber);
                Assert.Equal(30, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.EndArray);
                Assert.Equal(3, lineInfo.LineNumber);
                Assert.Equal(12, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.EndObject);
                Assert.Equal(1, lineInfo.LineNumber);
                Assert.Equal(1, lineInfo.LinePosition);
                Assert.Equal(true, lineInfo.HasLineInfo());

                jsonReader.Read();
                Assert.Equal(jsonReader.TokenType, JsonToken.None);
            }
        }
コード例 #6
0
		private bool ReadMetadataPropertiesToken (JTokenReader reader, ref Type objectType, ref JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, object existingValue, out object newValue, out string id)
		{
			id = null;
			newValue = null;

			if (reader.TokenType == JsonToken.StartObject) {
				JObject current = (JObject)reader._current;

				JToken refToken = current[JsonTypeReflector.RefPropertyName];
				if (refToken != null) {
					if (refToken.Type != JTokenType.String && refToken.Type != JTokenType.Null)
						throw JsonSerializationException.Create(refToken, refToken.Path, "JSON reference {0} property must have a string or null value.".FormatWith(CultureInfo.InvariantCulture, JsonTypeReflector.RefPropertyName), null);

					JToken property = refToken.Parent;
					JToken additionalContent = null;
					if (property.Next != null)
						additionalContent = property.Next;
					else if (property.Previous != null)
						additionalContent = property.Previous;

					string reference = (string)refToken;

					if (reference != null) {
						if (additionalContent != null)
							throw JsonSerializationException.Create(additionalContent, additionalContent.Path, "Additional content found in JSON reference object. A JSON reference object should only have a {0} property.".FormatWith(CultureInfo.InvariantCulture, JsonTypeReflector.RefPropertyName), null);

						newValue = Serializer.GetReferenceResolver().ResolveReference(this, reference);

						if (TraceWriter != null && TraceWriter.LevelFilter >= TraceLevel.Info)
							TraceWriter.Trace(TraceLevel.Info, JsonPosition.FormatMessage(reader as IJsonLineInfo, reader.Path, "Resolved object reference '{0}' to {1}.".FormatWith(CultureInfo.InvariantCulture, reference, newValue.GetType())), null);

						reader.Skip();
						return true;
					}
				}
				JToken typeToken = current[JsonTypeReflector.TypePropertyName];
				if (typeToken != null) {
					string qualifiedTypeName = (string)typeToken;
					JsonReader typeTokenReader = typeToken.CreateReader();
					CheckedRead(typeTokenReader);
					ResolveTypeName(typeTokenReader, ref objectType, ref contract, member, containerContract, containerMember, qualifiedTypeName);

					JToken valueToken = current[JsonTypeReflector.ValuePropertyName];
					if (valueToken != null) {
						while (true) {
							CheckedRead(reader);
							if (reader.TokenType == JsonToken.PropertyName) {
								if ((string)reader.Value == JsonTypeReflector.ValuePropertyName)
									return false;
							}

							CheckedRead(reader);
							reader.Skip();
						}
					}
				}
				JToken idToken = current[JsonTypeReflector.IdPropertyName];
				if (idToken != null) {
					id = (string)idToken;
				}
				JToken valuesToken = current[JsonTypeReflector.ArrayValuesPropertyName];
				if (valuesToken != null) {
					JsonReader listReader = valuesToken.CreateReader();
					CheckedRead(listReader);
					newValue = CreateList(listReader, objectType, contract, member, existingValue, id);

					reader.Skip();
					return true;
				}
			}

			CheckedRead(reader);
			return false;
		}
コード例 #7
0
        public void DeserializeFromRaw()
        {
            PersonRaw raw = new PersonRaw
            {
                FirstName = "FirstNameValue",
                RawContent = new JRaw("[1,2,3,4,5]"),
                LastName = "LastNameValue"
            };

            JObject o = JObject.FromObject(raw);

            JsonReader reader = new JTokenReader(o);
            JsonSerializer serializer = new JsonSerializer();
            raw = (PersonRaw)serializer.Deserialize(reader, typeof(PersonRaw));

            Assert.Equal("FirstNameValue", raw.FirstName);
            Assert.Equal("LastNameValue", raw.LastName);
            Assert.Equal("[1,2,3,4,5]", raw.RawContent.Value);
        }
コード例 #8
0
        public void JTokenReader()
        {
            PersonRaw raw = new PersonRaw
            {
                FirstName = "FirstNameValue",
                RawContent = new JRaw("[1,2,3,4,5]"),
                LastName = "LastNameValue"
            };

            JObject o = JObject.FromObject(raw);

            JsonReader reader = new JTokenReader(o);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.StartObject, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.PropertyName, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.String, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.PropertyName, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.Raw, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.PropertyName, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.String, reader.TokenType);

            Assert.True(reader.Read());
            Assert.Equal(JsonToken.EndObject, reader.TokenType);

            Assert.False(reader.Read());
        }