dotnet/runtime

Duplicate object keys shouldn't result in an ArgumentException

Open

#71 784 ouverte le 7 juil. 2022

Voir sur GitHub
 (9 commentaires) (7 réactions) (0 assignés)C# (5 445 forks)batch import
area-System.Text.Jsonbughelp wanted

Métriques du dépôt

Stars
 (17 886 stars)
Métriques de merge PR
 (Merge moyen 12j 11h) (661 PRs mergées en 30 j)

Description

Description

Currently, when a parsed JSON object has duplicate keys, an ArguementException is thrown from the underlying dictionary implementation. I would expect this to be thrown if I were manually attempting to add an existing key, but not from parsing.

Reproduction Steps

var json = JsonNode.Parse("[{\"foo\":1, \"bar\":2, \"foo\":3}]") as JsonArray;

var item = json[0]["bar"];

Expected behavior

Maybe throw JsonException?

Actual behavior

ArgumentException is thrown. Stack trace:

System.ArgumentException : An item with the same key has already been added. Key: {0} (Parameter 'foo')
   at System.Text.Json.ThrowHelper.ThrowArgumentException_DuplicateKey(String propertyName)
   at System.Text.Json.JsonPropertyDictionary`1.AddValue(String propertyName, T value)
   at System.Text.Json.JsonPropertyDictionary`1.Add(String propertyName, T value)
   at System.Text.Json.Nodes.JsonObject.InitializeIfRequired()
   at System.Text.Json.Nodes.JsonObject.System.Collections.Generic.IDictionary<System.String,System.Text.Json.Nodes.JsonNode>.TryGetValue(String propertyName, JsonNode& jsonNode)
   at System.Text.Json.Nodes.JsonObject.TryGetPropertyValue(String propertyName, JsonNode& jsonNode)
   at System.Text.Json.Nodes.JsonObject.GetItem(String propertyName)
   at System.Text.Json.Nodes.JsonNode.get_Item(String propertyName)

Regression?

No response

Known Workarounds

No response

Configuration

Seen in all released versions (.Net 6 and previous)

Other information

No response

Guide contributeur