I haven't reviewed the code you provide but I suspect I know what is happening. There is a bit of business logic that needs to be included to make Contacts work properly. In short, Contacts should (must) always be associated to a Customer. However, the API does not prevent you from creating a Contact without associating it to a Customer (because technically it is not required, but it is required to make Method business logic work correctly). The mechanism to associate a Contact to a Customer is to include the Customer as the Entity for the Contact. Entity is actually the parent table/object to Customer. If you do this the business logic will execute correctly and the FullName field will be generated (and a few other fields) automatically.
This is discussed in more detail in another post here (with a snipet of sample code): https://www.method.me/cs/forums/p/9709/35424.aspx#35424 .
Let us know if that helps.