in src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs [1202:1288]
private FeatureTelemetry ParseFeatureTelemetry(ref Utf8JsonReader reader, string settingKey)
{
var featureTelemetry = new FeatureTelemetry();
while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
{
if (reader.TokenType != JsonTokenType.PropertyName)
{
continue;
}
string telemetryPropertyName = reader.GetString();
switch (telemetryPropertyName)
{
case FeatureManagementConstants.Enabled:
{
if (reader.Read() && (reader.TokenType == JsonTokenType.False || reader.TokenType == JsonTokenType.True))
{
featureTelemetry.Enabled = reader.GetBoolean();
}
else if (reader.TokenType == JsonTokenType.String && bool.TryParse(reader.GetString(), out bool enabled))
{
featureTelemetry.Enabled = enabled;
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
FeatureManagementConstants.Enabled,
settingKey,
reader.TokenType.ToString(),
$"{JsonTokenType.True}' or '{JsonTokenType.False}");
}
break;
}
case FeatureManagementConstants.Metadata:
{
if (reader.Read() && reader.TokenType == JsonTokenType.StartObject)
{
featureTelemetry.Metadata = new Dictionary<string, string>();
while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
{
if (reader.TokenType != JsonTokenType.PropertyName)
{
continue;
}
string metadataPropertyName = reader.GetString();
if (reader.Read() && reader.TokenType == JsonTokenType.String)
{
featureTelemetry.Metadata[metadataPropertyName] = reader.GetString();
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
metadataPropertyName,
settingKey,
reader.TokenType.ToString(),
JsonTokenType.String.ToString());
}
}
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
FeatureManagementConstants.Metadata,
settingKey,
reader.TokenType.ToString(),
JsonTokenType.StartObject.ToString());
}
break;
}
default:
reader.Skip();
break;
}
}
return featureTelemetry;
}