Publicar y responder porque hay muchas ideas obsoletas y confusión sobre los estándares. A diciembre de 2017, hay dos estándares en competencia:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org sugiere que ECMA-404 es el estándar, pero este sitio no parece ser una autoridad. Si bien creo que es justo considerar a ECMA como la autoridad, lo importante aquí es que la única diferencia entre los estándares (con respecto a las claves únicas) es que RFC 8259 dice que las claves deberían ser únicas, y el ECMA-404 dice que no se requiere que sean único.
RFC-8259:
"Los nombres dentro de un objeto DEBEN ser únicos".
La palabra "debería" en mayúsculas, tiene un significado dentro del mundo RFC, que se define específicamente en otro estándar (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) como,
- Esta palabra, o el adjetivo "RECOMENDADO", significa que pueden existir razones válidas en circunstancias particulares para ignorar un elemento en particular, pero las implicaciones completas deben entenderse y sopesarse cuidadosamente antes de elegir un curso diferente.
ECMA-404:
"La sintaxis JSON no impone ninguna restricción en las cadenas utilizadas como nombres, no requiere que las cadenas de nombres sean únicas y no asigna ningún significado al orden de los pares de nombre / valor".
Entonces, no importa cómo lo corte, es JSON sintácticamente válido .
La razón dada para la recomendación clave única en RFC 8259 es,
Un objeto cuyos nombres son todos únicos es interoperable en el sentido de que todas las implementaciones de software que reciben ese objeto estarán de acuerdo en las asignaciones de nombre-valor. Cuando los nombres dentro de un objeto no son únicos, el comportamiento del software que recibe dicho objeto es impredecible. Muchas implementaciones solo informan el apellido / par de valores. Otras implementaciones informan un error o no pueden analizar el objeto, y algunas implementaciones informan todos los pares de nombre / valor, incluidos los duplicados.
En otras palabras, desde el punto de vista del RFC 8259, es válido, pero su analizador puede vomitar y no hay ninguna promesa sobre qué valor, si lo hay, se combinará con esa clave. Desde el punto de vista ECMA-404 (que personalmente tomaría como la autoridad), es válido, punto. Para mí, esto significa que cualquier analizador que se niegue a analizarlo está roto. Al menos debe analizar de acuerdo con estos dos estándares. Pero cómo se convierte en su objeto nativo de elección es, en cualquier caso, claves únicas o no, completamente dependientes del entorno y la situación, y nada de eso está en el estándar para empezar.
Dictionary<string, string>