Unfortunately, you're stuck with the names generated through the WCF serializer (the infamous "this behavior is by design"). This blog post has a good explanation of why WCF generated the client class names that way.
After some clarification, Action
in the question represents a .NET delegate and it cannot be serialized by WCF since it represents executable code. Method parameters and return values must be serializeable classes or value types.
Update from the comments:
[DataContract]
public class ActionArrayOfUserDto
{
public string ActionProperty1 { get; set; }
public string ActionProperty2 { get; set; }
// ... the rest of the Action generic class properties
public UserDto[] UserDtos { get; set; }
}
[DataContract]
public class UserDto
{
//UserDto properties...
}
You'd write code in your service to populate ActionArrayOfUserDto appropriately and not expose the Action generic class.