示例#1
0
        public override AbiDefinition ReadJson(JsonReader reader, Type objectType, AbiDefinition existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var token = JToken.Load(reader);

            existingValue ??= new AbiDefinition();
            foreach (var definitionToken in token.Children())
            {
                var type = Enum.Parse <AbiDescriptionType>(definitionToken[nameof(AbiBaseDescription <AbiParameter> .Type).ToLowerInvariant()].Value <string>(), true);
                var name = definitionToken[nameof(AbiBaseDescription <AbiParameter> .Name).ToLowerInvariant()]?.Value <string>();
                if (type == AbiDescriptionType.Event)
                {
                    var abiEvent = new AbiEventDescription();
                    serializer.Populate(definitionToken.CreateReader(), abiEvent);
                    existingValue.Add(abiEvent);
                }
                else
                {
                    var abiFunction = new AbiFunctionDescription();
                    serializer.Populate(definitionToken.CreateReader(), abiFunction);
                    existingValue.Add(abiFunction);
                }
            }

            return(existingValue);
        }
示例#2
0
        public override AbiDefinition ReadJson(
            JsonReader reader,
            Type objectType,
            AbiDefinition existingValue,
            bool hasExistingValue,
            JsonSerializer serializer)
        {
            JToken topLevelToken = JToken.Load(reader);

            existingValue ??= new AbiDefinition();

            JToken abiToken;

            if (topLevelToken.Type == JTokenType.Object)
            {
                abiToken = topLevelToken["abi"];
                byte[] bytecode = Bytes.FromHexString(topLevelToken["bytecode"]?.Value <string>() ?? string.Empty);
                existingValue.SetBytecode(bytecode);
            }
            else
            {
                abiToken = topLevelToken;
            }

            foreach (var definitionToken in abiToken?.Children() ?? Enumerable.Empty <JToken>())
            {
                string name      = definitionToken[_nameTokenName]?.Value <string>();
                JToken typeToken = definitionToken[_typeTokenName];
                if (typeToken == null)
                {
                    continue;
                }

                AbiDescriptionType type = Enum.Parse <AbiDescriptionType>(
                    typeToken.Value <string>(), true);

                if (type == AbiDescriptionType.Event)
                {
                    AbiEventDescription abiEvent = new AbiEventDescription();
                    serializer.Populate(definitionToken.CreateReader(), abiEvent);
                    existingValue.Add(abiEvent);
                }
                else
                {
                    AbiFunctionDescription abiFunction = new AbiFunctionDescription();
                    serializer.Populate(definitionToken.CreateReader(), abiFunction);
                    existingValue.Add(abiFunction);
                }
            }

            return(existingValue);
        }