dotnet/runtime

Duplicate object keys shouldn't result in an ArgumentException

オープン

#71,784 opened on 2022/07/07

 (9 件のコメント) (7 件のリアクション) (0 人の担当者)C# (5,445 件のフォーク)batch import
area-System.Text.Jsonbughelp wanted

Repository metrics

Stars
 (17,886 個のスター)
PR merge metrics
 (平均マージ 12d 11h) (30d で 661 merged PRs)

説明

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

コントリビューターガイド