У меня есть объект, который содержит список дополнительной информации.Серийный список JSON.NET как свойства родительского объекта
public class ParentObject
{
public string Prop1{ get; set; }
public string Prop2{ get; set; }
public IList<BaseInformation> AdditionalInformation{get;set;}
}
public abstract class AbstractInformation {}
public class ConcreteInformation1 : AbstractInformation
{
public string Concrete1Extra1{ get; set; }
public string Concrete1Extra2{ get; set; }
}
public class ConcreteInformation2 : AbstractInformation
{
public string Concrete2Extra1{ get; set; }
}
Я хочу иметь объект JSON, как этот
{
"Prop1": "MyValue1", //From ParentObject
"Prop2": "MyValue2", //From ParentObject
"Concrete1Extra1" : "Extra1" // From ConcreteInformation1
"Concrete1Extra2" : "Extra2" // From ConcreteInformation1
"Concrete2Extra1" : "Extra3" // From ConcreteInformation2
}
Я знаю, моя цель выглядит очень подвержен ошибкам (Having два объекта ConcreteInformation1 в списке будут вызывать повторяющиеся имена свойств), но я Simpified мой вопрос и пример, чтобы сосредоточиться только на поиске решения для объединения списка как свойств в родительский объект.
Я попытался написать свой собственный JsonConverter, но это сообщение об ошибке o.AddBeforeSelf()
, потому что JObject.Parent имеет значение NULL.
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
JObject o = (JObject)t;
o.AddBeforeSelf(new JProperty("PropertyOnParent", "Just a test"));
o.WriteTo(writer);
}
}
Если вы изменили свой список на 'Dictionary', вы можете получить результат, который хотите использовать с атрибутом '[JsonExtensionData]'. См. Этот вопрос [http://stackoverflow.com/q/14893614/10263] и [ответ] (http://stackoverflow.com/a/23786127/10263). –