internal override void WriteToken(JsonReader reader, bool writeChildren, bool writeDateConstructorAsDate, bool writeComments) { JTokenReader tokenReader = reader as JTokenReader; // cloning the token rather than reading then writing it doesn't lose some type information, e.g. Guid, byte[], etc if (tokenReader != null && writeChildren && writeDateConstructorAsDate && writeComments) { if (tokenReader.TokenType == JsonToken.None) { if (!tokenReader.Read()) { return; } } JToken value = tokenReader.CurrentToken.CloneToken(); if (_parent != null) { _parent.Add(value); _current = _parent.Last; // if the writer was in a property then move out of it and up to its parent object if (_parent.Type == JTokenType.Property) { _parent = _parent.Parent; InternalWriteValue(JsonToken.Null); } } else { _current = value; if (_token == null && _value == null) { _token = value as JContainer; _value = value as JValue; } } tokenReader.Skip(); } else { base.WriteToken(reader, writeChildren, writeDateConstructorAsDate, writeComments); } }
internal override void WriteToken( JsonReader reader, bool writeChildren, bool writeDateConstructorAsDate, bool writeComments) { JTokenReader jtokenReader = reader as JTokenReader; if (jtokenReader != null & writeChildren & writeDateConstructorAsDate & writeComments) { if (jtokenReader.TokenType == JsonToken.None && !jtokenReader.Read()) { return; } JToken jtoken = jtokenReader.CurrentToken.CloneToken(); if (this._parent != null) { this._parent.Add((object)jtoken); this._current = this._parent.Last; if (this._parent.Type == JTokenType.Property) { this._parent = this._parent.Parent; this.InternalWriteValue(JsonToken.Null); } } else { this._current = jtoken; if (this._token == null && this._value == null) { this._token = jtoken as JContainer; this._value = jtoken as JValue; } } jtokenReader.Skip(); } else { base.WriteToken(reader, writeChildren, writeDateConstructorAsDate, writeComments); } }
internal override void WriteToken(JsonReader reader, bool writeChildren, bool writeDateConstructorAsDate, bool writeComments) { JTokenReader jTokenReader = reader as JTokenReader; JTokenReader jTokenReader1 = jTokenReader; if (!(jTokenReader != null & writeChildren & writeDateConstructorAsDate & writeComments)) { base.WriteToken(reader, writeChildren, writeDateConstructorAsDate, writeComments); return; } if (jTokenReader1.TokenType == JsonToken.None && !jTokenReader1.Read()) { return; } JToken jTokens = jTokenReader1.CurrentToken.CloneToken(); if (this._parent == null) { this._current = jTokens; if (this._token == null && this._value == null) { this._token = jTokens as JContainer; this._value = jTokens as JValue; } } else { this._parent.Add(jTokens); this._current = this._parent.Last; if (this._parent.Type == JTokenType.Property) { this._parent = this._parent.Parent; base.InternalWriteValue(JsonToken.Null); } } jTokenReader1.Skip(); }
internal override void WriteToken(JsonReader reader, bool writeChildren, bool writeDateConstructorAsDate, bool writeComments) { JTokenReader reader2 = reader as JTokenReader; if ((((reader2 > null) & writeChildren) & writeDateConstructorAsDate) & writeComments) { if ((reader2.TokenType != JsonToken.None) || reader2.Read()) { JToken content = reader2.CurrentToken.CloneToken(); if (this._parent != null) { this._parent.Add(content); this._current = this._parent.Last; if (this._parent.Type == JTokenType.Property) { this._parent = this._parent.Parent; base.InternalWriteValue(JsonToken.Null); } } else { this._current = content; if ((this._token == null) && (this._value == null)) { this._token = content as JContainer; this._value = content as JValue; } } reader2.Skip(); } } else { base.WriteToken(reader, writeChildren, writeDateConstructorAsDate, writeComments); } }
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.CurrentToken; 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; }
// Token: 0x06000BC0 RID: 3008 // RVA: 0x00043F40 File Offset: 0x00042140 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 jObject = (JObject)reader.CurrentToken; JToken jToken = jObject["$ref"]; if (jToken != null) { if (jToken.Type != JTokenType.String && jToken.Type != JTokenType.Null) { throw JsonSerializationException.Create(jToken, jToken.Path, StringUtils.FormatWith("JSON reference {0} property must have a string or null value.", CultureInfo.InvariantCulture, "$ref"), null); } JToken parent = jToken.Parent; JToken jToken2 = null; if (parent.Next != null) { jToken2 = parent.Next; } else if (parent.Previous != null) { jToken2 = parent.Previous; } string text = (string)jToken; if (text != null) { if (jToken2 != null) { throw JsonSerializationException.Create(jToken2, jToken2.Path, StringUtils.FormatWith("Additional content found in JSON reference object. A JSON reference object should only have a {0} property.", CultureInfo.InvariantCulture, "$ref"), null); } newValue = this.Serializer.GetReferenceResolver().ResolveReference(this, text); if (this.TraceWriter != null && this.TraceWriter.LevelFilter >= TraceLevel.Info) { this.TraceWriter.Trace(TraceLevel.Info, JsonPosition.FormatMessage(reader, reader.Path, StringUtils.FormatWith("Resolved object reference '{0}' to {1}.", CultureInfo.InvariantCulture, text, newValue.GetType())), null); } reader.Skip(); return true; } } JToken jToken3 = jObject["$type"]; if (jToken3 != null) { string qualifiedTypeName = (string)jToken3; JsonReader reader2 = jToken3.CreateReader(); this.CheckedRead(reader2); this.ResolveTypeName(reader2, ref objectType, ref contract, member, containerContract, containerMember, qualifiedTypeName); JToken jToken4 = jObject["$value"]; if (jToken4 != null) { while (true) { this.CheckedRead(reader); if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "$value") { break; } this.CheckedRead(reader); reader.Skip(); } return false; } } JToken jToken5 = jObject["$id"]; if (jToken5 != null) { id = (string)jToken5; } JToken jToken6 = jObject["$values"]; if (jToken6 != null) { JsonReader reader3 = jToken6.CreateReader(); this.CheckedRead(reader3); newValue = this.CreateList(reader3, objectType, contract, member, existingValue, id); reader.Skip(); return true; } } this.CheckedRead(reader); return false; }