in src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureManagementKeyValueAdapter.cs [520:604]
private FeatureConditions ParseFeatureConditions(ref Utf8JsonReader reader, string settingKey)
{
var featureConditions = new FeatureConditions();
while (reader.Read() && reader.TokenType != JsonTokenType.EndObject)
{
if (reader.TokenType != JsonTokenType.PropertyName)
{
continue;
}
string conditionsPropertyName = reader.GetString();
switch (conditionsPropertyName)
{
case FeatureManagementConstants.ClientFilters:
{
if (reader.Read() && reader.TokenType == JsonTokenType.StartArray)
{
int i = 0;
while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
{
if (reader.TokenType == JsonTokenType.StartObject)
{
ClientFilter clientFilter = ParseClientFilter(ref reader, settingKey);
if (clientFilter.Name != null ||
(clientFilter.Parameters.ValueKind == JsonValueKind.Object &&
clientFilter.Parameters.EnumerateObject().Any()))
{
featureConditions.ClientFilters.Add(clientFilter);
}
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
$"{FeatureManagementConstants.ClientFilters}[{i}]",
settingKey,
reader.TokenType.ToString(),
JsonTokenType.StartObject.ToString());
}
i++;
}
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
FeatureManagementConstants.ClientFilters,
settingKey,
reader.TokenType.ToString(),
JsonTokenType.StartArray.ToString());
}
break;
}
case FeatureManagementConstants.RequirementType:
{
if (reader.Read() && reader.TokenType == JsonTokenType.String)
{
featureConditions.RequirementType = reader.GetString();
}
else if (reader.TokenType != JsonTokenType.Null)
{
throw CreateFeatureFlagFormatException(
FeatureManagementConstants.RequirementType,
settingKey,
reader.TokenType.ToString(),
JsonTokenType.String.ToString());
}
break;
}
default:
reader.Skip();
break;
}
}
return featureConditions;
}