Preciso criar o seguinte JSON:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "The Adventures of Kira and Morrison",
"startDate": "2025-07-21T19:00-05:00",
"endDate": "2025-07-21T23:00-05:00",
Então eu escrevi o seguinte C#
private MarkupString JsonLdEvent
{
get
{
dynamic data = new
{
@context = "https://schema.org",
@type = "Event",
name = Data?.Subject,
startDate = Data?.UnderlyingEvent?.StartDateTime.DateTimeOffset,
endDate = Data?.UnderlyingEvent?.EndDateTime.DateTimeOffset,
};
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
return new MarkupString(json);
}
}
O problema é que o JSON gerado "context": "https://schema.org"
não "@context": "https://schema.org"
. Existe uma maneira de definir a propriedade como @context
?
Atualização: se você encontrar exatamente esse problema - é necessário criar objetos Schema.Org - há uma biblioteca .NET que fornece isso (solução de @David).
Quando
@context
é usado como um identificador ,@
apenas significa "isto não é uma palavra-chave" - ou seja, para que você possa ter um membro chamadonew
,unsafe
,int
, ou semelhante -obj.@int
significa "o membro chamadoint
"obj
, ondeint
caso contrário é uma palavra-chave reservada. Então: é por isso que não está funcionando.Se você realmente precisa de membros dinâmicos (ou seja, a estrutura não é fixa), então talvez:
Ou como diz @daremachine nos comentários:
[JsonProperty]
/[JsonPropertyName]
em um POCO normal.