API, JSON.
() "":
FieldSelector, , , FieldSelection, ;FieldsSelection, FieldSelector.
, , AFAIK, (de) / URL- ServiceStack. ToString (serializer) , ().
DTO, JSON:
FieldsSelection Fields { get; set; }
ServiceRunner<T>.OnAfterExecute DTO JSON, ServiceStack.Text JsonObject , :
private static JsonObject Apply(this JsonObject json, FieldsSelection fieldMask)
{
IEnumerable<string> keysToRemove = json.Keys.ToList().Except(fieldMask.Keys);
foreach (var key in keysToRemove)
json.Remove(key);
foreach (var selector in fieldMask.Selectors.Values.Where(s => s.HasSubFieldsSelection))
{
var field = json[selector.Field];
if (field == null)
continue;
switch (field[0])
{
case '{':
json[selector.Field] = Apply(json.Object(selector.Field), selector.SubFieldsSelection).ToJson();
break;
case '[':
var itensArray = json.ArrayObjects(selector.Field);
for (int i = 0; i < itensArray.Count; i++)
itensArray[i] = Apply(itensArray[i], selector.SubFieldsSelection);
json[selector.Field] = itensArray.ToJson();
break;
default:
throw new ArgumentException("Selection incompatible with object structure");
}
}
return json;
}
DTO. (fields=-foo DTO, foo), .