Postagem e resposta, porque há muitas idéias desatualizadas e confusão sobre os padrões. Em dezembro de 2017, havia dois padrões concorrentes:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
O json.org sugere que o ECMA-404 é o padrão, mas este site não parece ser uma autoridade. Embora eu ache justo considerar a ECMA a autoridade, o importante aqui é que a única diferença entre os padrões (em relação às chaves exclusivas) é que a RFC 8259 diz que as chaves devem ser únicas e o ECMA-404 diz que elas não são necessárias ser único.
RFC-8259:
"Os nomes dentro de um objeto DEVEM ser únicos."
A palavra "should" em todas as maiúsculas como essa tem um significado no mundo da RFC, definido especificamente em outro padrão (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) como,
- DEVE Esta palavra, ou o adjetivo "RECOMENDADO", significa que podem existir razões válidas em circunstâncias particulares para ignorar um item em particular, mas todas as implicações devem ser entendidas e ponderadas cuidadosamente antes de escolher um curso diferente.
ECMA-404:
"A sintaxe JSON não impõe restrições às cadeias usadas como nomes, não exige que as cadeias de nomes sejam exclusivas e não atribui qualquer significado à ordem dos pares nome / valor."
Portanto, não importa como você o corta, é JSON sintaticamente válido .
O motivo apresentado para a recomendação chave exclusiva na RFC 8259 é:
Um objeto cujos nomes são todos únicos é interoperável no sentido de que todas as implementações de software que recebem esse objeto concordam com os mapeamentos de valor de nome. Quando os nomes dentro de um objeto não são exclusivos, o comportamento do software que recebe esse objeto é imprevisível. Muitas implementações relatam apenas o par sobrenome / valor. Outras implementações relatam um erro ou falha ao analisar o objeto, e algumas implementações relatam todos os pares de nome / valor, incluindo duplicatas.
Em outras palavras, do ponto de vista da RFC 8259, é válido, mas seu analisador pode vomitar e não há promessa de qual valor, se houver, será emparelhado com essa chave. Do ponto de vista da ECMA-404 (que eu pessoalmente consideraria a autoridade), é válido, ponto final. Para mim, isso significa que qualquer analisador que se recusa a analisá-lo está quebrado. Deve pelo menos analisar de acordo com esses dois padrões. Mas como ele se transforma no seu objeto de escolha nativo é, em qualquer caso, chaves únicas ou não, completamente dependente do ambiente e da situação, e nada disso está no padrão para começar.
Dictionary<string, string>