using System.Collections.Generic; using System.Globalization; using DPumpHydr.WinFrmUI.WenSkin.Json.Utilities; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Linq.JsonPath { internal class FieldFilter : PathFilter { public string Name { get; set; } public override IEnumerable ExecuteFilter(IEnumerable current, bool errorWhenNoMatch) { foreach (JToken t in current) { JObject o = t as JObject; if (o != null) { if (Name != null) { JToken jToken = o[Name]; if (jToken != null) { yield return jToken; } else if (errorWhenNoMatch) { throw new JsonException("Property '{0}' does not exist on JObject.".FormatWith(CultureInfo.InvariantCulture, Name)); } continue; } foreach (KeyValuePair item in o) { yield return item.Value; } } else if (errorWhenNoMatch) { throw new JsonException("Property '{0}' not valid on {1}.".FormatWith(CultureInfo.InvariantCulture, Name ?? "*", t.GetType().Name)); } } } } }