Skip to content

ObjectPath is a utility class which allows you to retreive/set object path properties on dynamic and typed objects.

License

Notifications You must be signed in to change notification settings

tomlm/Iciclecreek.ObjectPath

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ObjectPath

ObjectPath is a utility class which allows you to retreive/set object path properties on dynamic and typed objects.

Paths

Let's say you have an object, it could be a typed object, or dynamic object or even a dictionary.

ObjectPath allows you to dynamically navigate the object hierachy using a string path expression.

For example:

if (ObjectPath.TryGetValue<int>("x.y.z", out var val))
{
   // use val is a int
}

Methods

Methods Description
HasValue(obj, path) returns true if the path can be evaluated against obj
GetPathValue<T>(obj, path) returns the result of evaluating path as T if it exists, or throws if the path doesn't
TryGetValueValue<T>(obj, path, out T) retruns the result of valuating the path if it exists
SetPathValue(obj, path, val) sets the path to a given value
RemovePathValue(obj, path) removes the leaf of path (for dynamic objects) or resets it to default for typed objects
GetProperties(obj) enumerates public properties for objects/dictionaries/dynamic objects
ForEachProperty(obj, action) calls action with each public properties for objects/dictionaries/dynamic objects
ContainsProperty(obj, prop) shallow inspection to see if current object has a property/value named prop
Clone<T>(obj) creates a deep clone of public properties and all of it's children
Merge<T>(startObj, overlayObj) creates a new object which is clone of startObj with any properties defined on overlayObj merged over it
Assign<T>(startObj, overlayObj) creates a new object which is clone of startObj with any properties defined on overlayObj merged over it
MapValueTo<T>(obj) coercices an object to a given type.

Examples

  var dyn = new { X = 13, Y = new {Z = "15" } };

  ObjectPath.GetPathValue(dyn, "X"); ==> 13
  ObjectPath.GetPathValue(dyn, "X.Y.Z"); ==> "15"
  ObjectPath.GetPathValue<int>(dyn, "X.Y.Z"); ==> 15
  ObjectPath.HasPathValue(dyn, "X.Y") ==> true
  ObjectPath.HasPathValue(dyn, "X.FOO") ==> false
  
  // you can set path values without having to check sub parts, it will use JTokens to build the path.
  ObjectPath.SetPathValue(dyn, "X.FOO.Zoo", "hello");
  
  ObjectPath.HasPathValue(dyn, "X.FOO") ==> true
  ObjectPath.GetPathValue(dyn, "X.FOO.Zoo") ==> "hello"
  etc

About

ObjectPath is a utility class which allows you to retreive/set object path properties on dynamic and typed objects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages