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); }
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); }