public JsonContract ModifyContract(JsonContract contract)
        {
            if (contract is JsonDictionaryContract)
            {
                var dictionaryContract = contract as JsonDictionaryContract;
                if (typeof(GeoLocation).IsAssignableFrom(dictionaryContract.DictionaryValueType))
                {
                    dictionaryContract.DictionaryKeyResolver = x => x + "$$geo";
                }
                else if (typeof(Attachment).IsAssignableFrom(dictionaryContract.DictionaryValueType))
                {
                    dictionaryContract.DictionaryKeyResolver = x => x + "$$attachment";
                }
                else
                {
                    dictionaryContract.DictionaryKeyResolver = x => TypeSuffix.GetSuffixedFieldName(x, dictionaryContract.DictionaryValueType);
                }

                dictionaryContract.Converter = new Dictionary2Find.Json.DictionaryConverter()
                {
                    PropertyNameDesolver = x => x.Contains('$') ? x.Split('$')[0] : x
                };
            }

            return(contract);
        }
 public TypedNetString(System.IO.Stream data)
 {
     this.data = data;
     lock (this.data) {
         this.offset = data.Position;
         int         byteRead;
         List <byte> lengthBytes = new List <byte>();
         while ((byteRead = data.ReadByte()) != DELIM)
         {
             if (byteRead == -1)
             {
                 throw new System.IO.EndOfStreamException("Reached end of stream while reading length field");
             }
             lengthBytes.Add((byte)byteRead);
         }
         this.valueLength = 0;
         if (lengthBytes.Count > 0)
         {
             string lengthString = System.Text.ASCIIEncoding.ASCII.GetString(lengthBytes.ToArray());
             if (lengthString.Length > 0)
             {
                 this.valueLength = Int32.Parse(lengthString);
             }
         }
         this.valueOffset = data.Position;
         data.Position   += this.valueLength;
         this.Type        = (TypeSuffix)data.ReadByte();
     }
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Url    url = existingValue as Url;
            string str = (string)null;

            while (reader.Read())
            {
                if (reader.TokenType.Equals((object)JsonToken.PropertyName))
                {
                    str = reader.Value as string;
                }
                if (reader.TokenType.Equals((object)JsonToken.String) && str.Equals(TypeSuffix.GetSuffixedFieldName("OriginalString", typeof(string))))
                {
                    return((object)new Url(reader.Value.ToString()));
                }
            }
            return((object)url);
        }