Allow list values to be null when parsing

pull/4345/head
Jon Skeet 7 years ago
parent 9dc0a4d5cf
commit 822b924d59
  1. 16
      csharp/src/Google.Protobuf.Test/JsonParserTest.cs
  2. 5
      csharp/src/Google.Protobuf/JsonParser.cs

@ -695,6 +695,22 @@ namespace Google.Protobuf
Assert.AreEqual(Value.ForList(Value.ForNumber(1), Value.ForString("x")), Value.Parser.ParseJson("[1, \"x\"]")); Assert.AreEqual(Value.ForList(Value.ForNumber(1), Value.ForString("x")), Value.Parser.ParseJson("[1, \"x\"]"));
} }
[Test]
public void Value_List_WithNullElement()
{
var expected = Value.ForList(Value.ForString("x"), Value.ForNull(), Value.ForString("y"));
var actual = Value.Parser.ParseJson("[\"x\", null, \"y\"]");
Assert.AreEqual(expected, actual);
}
[Test]
public void StructValue_NullElement()
{
var expected = Value.ForStruct(new Struct { Fields = { { "x", Value.ForNull() } } });
var actual = Value.Parser.ParseJson("{ \"x\": null }");
Assert.AreEqual(expected, actual);
}
[Test] [Test]
public void ParseListValue() public void ParseListValue()
{ {

@ -264,11 +264,12 @@ namespace Google.Protobuf
return; return;
} }
tokenizer.PushBack(token); tokenizer.PushBack(token);
if (token.Type == JsonToken.TokenType.Null) object value = ParseSingleValue(field, tokenizer);
if (value == null)
{ {
throw new InvalidProtocolBufferException("Repeated field elements cannot be null"); throw new InvalidProtocolBufferException("Repeated field elements cannot be null");
} }
list.Add(ParseSingleValue(field, tokenizer)); list.Add(value);
} }
} }

Loading…
Cancel
Save