Хорошо, так что это дизайн тогда. Достаточно хорошо для меня.

сто столкнулся с ошибкой, когда я использовал 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:

Ответы на вопрос(1)

Ваш ответ на вопрос