Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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;
 }