Jil
Jil copied to clipboard
Deserialize dynamic object ToString() return with quoto
when deserialize dynamic object ,and the ToString() of this object with return with quoto
I have the same issue with Jil 2.15.4. Test program below:
class Program
{
private class Message
{
public string field { get; set; }
}
static void Main(string[] args)
{
string singleMessage = "{\"field\":\"A\"}";
string messages = "[{\"field\":\"A\"},{\"field\":\"B\"}]";
Console.WriteLine("*** Dynamic parsing ***");
dynamic parsedSingleMessage = JSON.DeserializeDynamic(singleMessage);
Console.WriteLine("\tSingle message, field=" + parsedSingleMessage.field);
dynamic parsedMessages = JSON.DeserializeDynamic(messages);
foreach (dynamic parsedMessage in parsedMessages)
{
Console.WriteLine("\tMessage in array, field=" + parsedMessage.field);
}
Console.WriteLine("*** Static parsing ***");
Message parsedSingleMessageStatic = JSON.Deserialize<Message>(singleMessage);
Console.WriteLine("\tSingle message, field=" + parsedSingleMessageStatic.field);
IList<Message> parsedMessagesStatic = JSON.Deserialize<List<Message>>(messages);
foreach (dynamic parsedMessage in parsedMessagesStatic)
{
Console.WriteLine("\tMessage in array, field=" + parsedMessage.field);
}
Console.ReadLine();
}
}
}
Output should be the same for both dynamic and static, but it is actually:
*** Dynamic parsing *** Single message, field="A" Message in array, field="A" Message in array, field="B" *** Static parsing *** Single message, field=A Message in array, field=A Message in array, field=B
If I pass Json token (decoded) to JsonSerializer vs NewtonSoft vs Jil Serializer, I'm seeing the same error:
var payloadData1 = jsonSerializer.Deserialize<Dictionary<string, object>>(payloadJson); vs var payloadData2 = JsonConvert.DeserializeObject<Dictionary<string, object>>(payloadJson); vs var payloadData3 = Jil.JSON.Deserialize<Dictionary<string, object>>(payloadJson);
I get different values for string (value). The Keys are fine but string values returned by Jil have double-quotes around them, while other two return strings correctly.