microsoft / microsoft/typespec

[Bug]: @typespec/http-server-csharp generates JsonObject instead of dictionary types for Record<T> properties

Open
#8,488 1 comment 0 reactions 0 assignees View on GitHub
bug emitter:service:csharp triaged:core
Dominant language
Java
Stars
5.9k
Forks
394
Avg merge
1d 23h
Merged PRs (30d)
104

Description

### Describe the bug

When running the @typespec/http-server-csharp emitter, I noticed that Record types were transformed into JsonObject instead of strongly typed Dictionary or IDictionary

JsonObject is kind of useless, since you lose all type safety

### Reproduction

```
import "@typespec/http";

using Http;

@service(#{ title: "Bug Repro API" })
namespace BugRepro;

/** A simple value type */
model SimpleValue {
name: string;
value: int32;
}

model ContainerWithRecord {
/** This should be Dictionary not JsonObject */
items: Record;
}

/** Simple REST API to test generation */
@route("/api")
interface TestApi {
@get
@route("/test")
getTest(): ContainerWithRecord;
}
```

and

```
emit:
- "@typespec/http-server-csharp"
options:
"@typespec/http-server-csharp":
emitter-output-dir: "{project-root}/output"
emit-mocks: "mocks-and-project-files"
project-name: "BugRepro"
```

run `tsp compile minimal.tsp --config tspconfig.yaml`

Look at `output/generated/models/ContainerWithRecord.cs` - the `Items` property should be a strongly-typed dictionary but is generated as `JsonObject`.

### Checklist

- [x] Follow our [Code of Conduct](https://github.com/microsoft/typespec/blob/main/CODE_OF_CONDUCT.md)
- [x] Check that there isn't already an issue that request the same bug to avoid creating a duplicate.
- [x] Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/Microsoft/typespec/discussions).
- [x] The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.