dotnet/runtime
Voir sur GitHubDuplicate object keys shouldn't result in an ArgumentException
Open
#71 784 ouverte le 7 juil. 2022
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