internal static ScoringProfile DeserializeScoringProfile(JsonElement element) { string name = default; TextWeights text = default; IList <ScoringFunction> functions = default; ScoringFunctionAggregation?functionAggregation = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("name")) { name = property.Value.GetString(); continue; } if (property.NameEquals("text")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } text = TextWeights.DeserializeTextWeights(property.Value); continue; } if (property.NameEquals("functions")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } List <ScoringFunction> array = new List <ScoringFunction>(); foreach (var item in property.Value.EnumerateArray()) { if (item.ValueKind == JsonValueKind.Null) { array.Add(null); } else { array.Add(ScoringFunction.DeserializeScoringFunction(item)); } } functions = array; continue; } if (property.NameEquals("functionAggregation")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } functionAggregation = property.Value.GetString().ToScoringFunctionAggregation(); continue; } } return(new ScoringProfile(name, text, functions, functionAggregation)); }
internal static ScoringFunction DeserializeScoringFunction(JsonElement element) { if (element.TryGetProperty("type", out JsonElement discriminator)) { switch (discriminator.GetString()) { case "distance": return(DistanceScoringFunction.DeserializeDistanceScoringFunction(element)); case "freshness": return(FreshnessScoringFunction.DeserializeFreshnessScoringFunction(element)); case "magnitude": return(MagnitudeScoringFunction.DeserializeMagnitudeScoringFunction(element)); case "tag": return(TagScoringFunction.DeserializeTagScoringFunction(element)); } } ScoringFunction result = new ScoringFunction(); foreach (var property in element.EnumerateObject()) { if (property.NameEquals("type")) { result.Type = property.Value.GetString(); continue; } if (property.NameEquals("fieldName")) { result.FieldName = property.Value.GetString(); continue; } if (property.NameEquals("boost")) { result.Boost = property.Value.GetDouble(); continue; } if (property.NameEquals("interpolation")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } result.Interpolation = property.Value.GetString().ToScoringFunctionInterpolation(); continue; } } return(result); }
internal static ScoringProfile DeserializeScoringProfile(JsonElement element) { ScoringProfile result = new ScoringProfile(); foreach (var property in element.EnumerateObject()) { if (property.NameEquals("name")) { result.Name = property.Value.GetString(); continue; } if (property.NameEquals("text")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } result.TextWeights = TextWeights.DeserializeTextWeights(property.Value); continue; } if (property.NameEquals("functions")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } result.Functions = new List <ScoringFunction>(); foreach (var item in property.Value.EnumerateArray()) { result.Functions.Add(ScoringFunction.DeserializeScoringFunction(item)); } continue; } if (property.NameEquals("functionAggregation")) { if (property.Value.ValueKind == JsonValueKind.Null) { continue; } result.FunctionAggregation = property.Value.GetString().ToScoringFunctionAggregation(); continue; } } return(result); }