Jil icon indicating copy to clipboard operation
Jil copied to clipboard

Deserialize dynamic object ToString() return with quoto

Open asyura opened this issue 7 years ago • 2 comments

when deserialize dynamic object ,and the ToString() of this object with return with quoto

asyura avatar Dec 22 '17 07:12 asyura

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

TwonkyTheRobot avatar Feb 15 '18 15:02 TwonkyTheRobot

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.

AachoLoya avatar May 12 '20 10:05 AachoLoya