Start here. This is the direct spoken answer to practice first.
Why this question matters
A C# response type is not the wire contract by itself. Serializer settings and converters decide what clients actually send and receive, and small defaults can become durable dependencies.
ASP.NET Core uses System.Text.Json by default for JSON APIs, and its options shape the public wire contract. Property naming, case matching, whether null or default values are omitted, enum representation, date and time formats, number handling, custom converters, and reference behavior can all change payloads without changing an endpoint route. I expose request and response DTOs designed for the contract instead of serializing EF entities or domain graphs directly. Global options remain consistent across endpoints, while an endpoint-specific exception is rare and documented. Before changing an option or converter, I compare representative old and new payloads and treat incompatible output or newly rejected input as an API change.