After executing your tests, you'll have a result file that contains the test results and the uid. Pushing it back to CucumberStudio will update the results in the test run.
To be able to generate a cucumber json result file, you should use a gherkin based framework like SpecFlow. Is it an option in your case?
If exporting to C# directly, when a test fails, it's hard to know at which step it was failing because this information is not present most of the time: we only have the test name, and the steps are test implementation details. It looks like you are able to get this information though as you wanted to use the API to update tests at the step level. Can you describe how you have this information?
To explain it briefly: along with the status, status-author and description attributes, you can also add a step-statuses attribute. It must be an array of string. Each string is a status. Possible values are ‘passed’, 'failed’, 'wip’, 'retest’, 'blocked’, 'skipped’, 'undefined’.