[Fork] Serialization on Dictionary Backing failure

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Xunit;

namespace Basic
{
	public class Application
	{
		public static void Main(string[] args)
		{
			var sanity = new SanityChecks();
			var actionList = new List<Action>() { sanity.SanityCheck_CanDeserialize,sanity.SanityCheck_CanSerialize,sanity.SanityCheck_CanDeserializeFromSerialized};
			foreach (var action in actionList)
			{
				Console.WriteLine("Test Started");
				try{
					action.Invoke();
					Console.WriteLine("Test Passed");
				}
				catch (Exception ex)
				{
					Console.WriteLine(ex);
					Console.WriteLine("Failed Test");
				}
				Console.WriteLine("\n\n");
			}		
		}
	}
	
    public class SanityChecks
    {
		public class TestClass 
        {
            internal Dictionary<int,string> _prvList = new Dictionary<int, string>();
            public IEnumerable<string> ListValues
            {
                get { return _prvList.Select(p=> p.Value).ToList();}
                set
                {
                    var valArr = value.ToArray();
                    for (var x = 0; x < valArr.Length; x++)
                    {
                        _prvList.Add(x,valArr[x]);
                    }
                }
            }
        }
		
        public void SanityCheck_CanDeserialize()
        {
            var assumption = "{\"ListValues\":[\"TestValue\",\"AAA\"]}";
            var actual = JsonConvert.DeserializeObject<TestClass>(assumption, 
					new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace });  // pass settings to DeserializeObject
            Assert.Equal(2, actual._prvList.Count());
            Assert.Equal(2, actual.ListValues.Count());
        }
        
        public void SanityCheck_CanSerialize()
        {
            var assumption = new TestClass() { ListValues = new[] { "TestValue", "AAA" } };
            var actualSerialized = JsonConvert.SerializeObject(assumption);
            Console.WriteLine(actualSerialized);
            Assert.Equal("{\"ListValues\":[\"TestValue\",\"AAA\"]}", actualSerialized);
        }
        
        public void SanityCheck_CanDeserializeFromSerialized()
        {
            var assumption = new TestClass() { ListValues = new[] { "TestValue", "AAA" } };
            var actualSerialized = JsonConvert.SerializeObject(assumption);
            Console.WriteLine(actualSerialized);
            var actualDeserialized = JsonConvert.DeserializeObject<TestClass>(actualSerialized, 
					new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace });  // pass settings to DeserializeObject
            Assert.Equal(2, actualDeserialized._prvList.Count());
            var actualDeserializedSerialized = JsonConvert.SerializeObject(actualDeserialized);
            Console.WriteLine(actualDeserializedSerialized);
            Assert.Equal(actualSerialized, actualDeserializedSerialized);
        }
    }
}
;