Базовый класс содержит свойство, которое спрятано новым свойством в подклассе, но другого типа. при десериализации я сталкиваюсь с проблемой. Я не могу изменить имя свойства в C# или json, но, если возможно, может добавить пространство имен.Как сериализовать объект C# в Json с пространством имен. Если возможно, то каким-то образом
namespace xyz
{
public class A
{
public ICollection<xyz.OrganizationAttribute> OrganizationAttributes { get; set; }
}
}
namespace pqr
{
public class AX : A
{
public new ICollection<pqr.OrganizationAttribute> OrganizationAttributes { get; set; }
}
}
Update:
JsonConvert.SerializeObject(axObject, new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
DefaultValueHandling = DefaultValueHandling.Ignore
});
JsonConvert.DeserializeObject<A>("axjsonString", new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
});
Любая помощь приветствуется. Спасибо
Как вы deserialize? Обычно, если вы передаете результирующий объект, AX C# автоматически создаст свойство типа потомка. Опубликуйте свой механизм десериализации здесь – Emad
@Emad Я десериализую AX json для объекта с использованием NewtonSoft с настройкой ReadAHead. var a = result.Documents ?.Select (x => x.ToObject (новый JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead })); –
1) Вы можете каким-либо образом изменить базовый класс 'A'? 2) Собираетесь ли вы как коллекции 'xyz.OrganizationAttribute', так и' pqr.OrganizationAttribute', чтобы они отображались в файле или только производная коллекция? 3) Если ваш тип 'AX' игнорирует коллекцию' xyz', это, по-видимому, нарушает [Принцип замены Лискова] (https://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle). Вы уверены, что хотите это сделать? – dbc