예제 #1
0
 public void ReadValue(JsonAction <object, JsonValueType> value, JsonAction readArray, JsonAction readObject)
 {
     if (value is null)
     {
         throw new ArgumentNullException(nameof(value));
     }
     if (readArray is null)
     {
         throw new ArgumentNullException(nameof(readArray));
     }
     if (readObject is null)
     {
         throw new ArgumentNullException(nameof(readObject));
     }
     if (Stacks.Peek().ArrayType != JsonArrayType.Unknown)
     {
         readArray();
         return;
     }
     if (Stacks.Peek().ObjectType != JsonObjectType.Unknown)
     {
         readObject();
         return;
     }
     Stacks.Peek().IsInitialized = true;
     if (Stacks.Peek().Instance is null)
     {
         value(null, JsonValueType.Null);
         return;
     }
     if (Stacks.Peek().Type is null)
     {
         Stacks.Peek().Type = Stacks.Peek().Instance.GetType();
     }
     if (JsonApi.TryGetValueType(Stacks.Peek().Type, out JsonValueType valueType, Config))
     {
         value(Stacks.Peek().Instance, valueType);
         return;
     }
     if (JsonApi.TryGetArrayType(Stacks.Peek().Type, out Stacks.Peek().ArrayType))
     {
         readArray();
         return;
     }
     if (JsonApi.TryGetObjectType(Stacks.Peek().Type, out Stacks.Peek().ObjectType))
     {
         readObject();
         return;
     }
     throw new JsonNotSupportException(Stacks.Peek().Type);
 }
예제 #2
0
 public void Write(object value)
 {
     if (value is JsonValue jsonValue)
     {
         new JsonTextBuilder(new JsonValueReader(jsonValue, Config), this, Config).BuildValue();
         return;
     }
     if (value is JsonArray array)
     {
         new JsonTextBuilder(new JsonValueReader(array, Config), this, Config).BuildArray();
         return;
     }
     if (value is JsonObject jsonObject)
     {
         new JsonTextBuilder(new JsonValueReader(jsonObject, Config), this, Config).BuildObject();
         return;
     }
     if (JsonApi.TryGetValueType(value, out JsonValueType valueType, Config))
     {
         Write(value, valueType);
         return;
     }
     new JsonTextBuilder(new JsonSerializer(value, Config), this, Config).BuildValue();
 }