public static TAttribute FromInvokeString(AttributeCloner <TAttribute> cloner, string invokeString) { if (invokeString == null) { throw new ArgumentNullException("invokeString"); } // Instantiating new attributes can be tricky since sometimes the arg is to the ctor and sometimes // its a property setter. AttributeCloner already solves this, so use it here to do the actual attribute instantiation. // This has an instantiation problem similar to what Attribute Cloner has if (invokeString[0] == '{') { var propertyValues = JsonConvert.DeserializeObject <IDictionary <string, string> >(invokeString); var attr = cloner.New(propertyValues); return(attr); } else { var attr = cloner.New(invokeString); return(attr); } }