How to enforce datatypes in an Index

I have types that define my mappings, I am using the old client to create my mapping for the index. With this mapping I have set dynamic to "strict" which has allowed me to enforce that when passing an update for example:

POST myindex/_update
{
doc: { "fieldwhichdoesntexist" : "value"}
}

it throws an error.

However, I am having trouble enforcing types, so if in my mapping I set the type to "text" for example, in the update i can set this field to whatever data type such as integer, this creates a problem in C# because the class is expecting a string but with the update it has allowed me to change it to an int. Therefore when deserializing the response into the object it throws an error. Are there any mechanisms that can prevent changing types with the API?

No, not that I am aware of. Mappings define how Elasticsearch indexes the data received in the JSON but does not necessarily strictly validate the JSON data unless it causes a mapping conflict as it can not be cast and indexed correctly. If you map a field as text/keyword any string or number you send in will be cast and indexed as a string without causing any errors.