using System.Collections.Generic; using System.Globalization; using System.Linq; using DPumpHydr.WinFrmUI.WenSkin.Json.Utilities; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Linq.JsonPath { internal class FieldMultipleFilter : PathFilter { public List Names { get; set; } public override IEnumerable ExecuteFilter(IEnumerable current, bool errorWhenNoMatch) { foreach (JToken t in current) { JObject o = t as JObject; if (o != null) { foreach (string name in Names) { JToken jToken = o[name]; if (jToken != null) { yield return jToken; } if (errorWhenNoMatch) { throw new JsonException("Property '{0}' does not exist on JObject.".FormatWith(CultureInfo.InvariantCulture, name)); } } } else if (errorWhenNoMatch) { throw new JsonException("Properties {0} not valid on {1}.".FormatWith(CultureInfo.InvariantCulture, string.Join(", ", Names.Select((string n) => "'" + n + "'").ToArray()), t.GetType().Name)); } } } } }