Хорошо, так что это дизайн тогда. Достаточно хорошо для меня.
сто столкнулся с ошибкой, когда я использовал Newtonsoft.JsonSerializeObject
метод. Это спрашивали раньшеВот, но не было ответа от людей, работающих с Newtonsoft, о том, почему это происходит.
В основном при звонкеSerializeObject
нравится:
string json = Newtonsoft.Json.JsonConvert.SerializeObject(from, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
Я получаю ошибки во многихEquals
методы, которые я переопределил в моих классах:
public override bool Equals(object obj)
{
if (obj == null)
return false;
CapacityConfiguration cc = (CapacityConfiguration)obj; // <-- TypeCastException here; other Properties of the same class are sent in as parameter!
}
И, конечно, я понимаю, что это «легко» исправить, проверив вот так:
public override bool Equals(object obj)
{
if (obj is CapacityConfiguration == false)
return false;
CapacityConfiguration cc = (CapacityConfiguration)obj;
}
Но настоящий вопрос заключается в следующем:Почему Json.Net отправляет другие типы объектов вEquals
метод класса? В частности, Json.Net, похоже, отправляет множество других свойств в классе вместо другого объекта того же типа.
Для меня это совершенно странно. Любой вклад будет оценен.
Я использую «Версия 8.0.0.0» в соответствии с Visual Studio.
ОБНОВЛЕНИЕ 1
Это легко проверить, так как это воспроизводимо:
public class JsonTestClass
{
public string Name { get; set; }
public List<int> MyIntList { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
return false;
JsonTestClass jtc = (JsonTestClass)obj;
return true;
}
}
А затем просто поместите этот код в Program.cs или где-нибудь еще:
JsonTestClass c = new JsonTestClass();
c.Name = "test";
c.MyIntList = new List<int>();
c.MyIntList.Add(1);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(c, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
и вы получите исключение TypeCast: