-Fixed JTokenWriter error with duplicate properties
This commit is contained in:
@@ -265,6 +265,28 @@ namespace Newtonsoft.Json.Tests.Linq
|
||||
]", writer.Token.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WriteDuplicatePropertyName()
|
||||
{
|
||||
JTokenWriter writer = new JTokenWriter();
|
||||
|
||||
writer.WriteStartObject();
|
||||
|
||||
writer.WritePropertyName("prop1");
|
||||
writer.WriteStartObject();
|
||||
writer.WriteEndObject();
|
||||
|
||||
writer.WritePropertyName("prop1");
|
||||
writer.WriteStartArray();
|
||||
writer.WriteEndArray();
|
||||
|
||||
writer.WriteEndObject();
|
||||
|
||||
StringAssert.AreEqual(@"{
|
||||
""prop1"": []
|
||||
}", writer.Token.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DateTimeZoneHandling()
|
||||
{
|
||||
|
||||
@@ -8630,11 +8630,11 @@ Path '', line 1, position 1.");
|
||||
[Test]
|
||||
public void DuplicatePropertiesInNestedObject()
|
||||
{
|
||||
ExceptionAssert.Throws<ArgumentException>(() =>
|
||||
{
|
||||
string content = @"{""result"":{""time"":1408188592,""time"":1408188593},""error"":null,""id"":""1""}";
|
||||
JsonConvert.DeserializeObject<JObject>(content);
|
||||
}, "Can not add property time to Newtonsoft.Json.Linq.JObject. Property with the same name already exists on object.");
|
||||
string content = @"{""result"":{""time"":1408188592,""time"":1408188593},""error"":null,""id"":""1""}";
|
||||
JObject o = JsonConvert.DeserializeObject<JObject>(content);
|
||||
int time = (int)o["result"]["time"];
|
||||
|
||||
Assert.AreEqual(1408188593, time);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -166,9 +166,17 @@ namespace Newtonsoft.Json.Linq
|
||||
/// <param name="name">The name of the property.</param>
|
||||
public override void WritePropertyName(string name)
|
||||
{
|
||||
JObject o = _parent as JObject;
|
||||
if (o != null)
|
||||
{
|
||||
// avoid duplicate property name exception
|
||||
// last property name wins
|
||||
o.Remove(name);
|
||||
}
|
||||
|
||||
AddParent(new JProperty(name));
|
||||
|
||||
// don't set state until after in case of an error such as duplicate property names
|
||||
// don't set state until after in case of an error
|
||||
// incorrect state will cause issues if writer is disposed when closing open properties
|
||||
base.WritePropertyName(name);
|
||||
}
|
||||
|
||||
+1
-2
@@ -3,7 +3,6 @@
|
||||
<packageSources>
|
||||
<!--To inherit the global NuGet package sources remove the <clear/> line below -->
|
||||
<clear />
|
||||
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
<add key="nuget.org/api/v2" value="https://nuget.org/api/v2/" />
|
||||
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
|
||||
Reference in New Issue
Block a user