{ "Name": "SP500", "Positions": [ { "Ticker": "AOS", "Size": 100, }, { "Ticker": "ABT", "Size": 100, } ] }
5 Réponses :
Utilisez ceci:
public class Portfolio { public string Name {get; set;} public List<Position> Positions {get; set;} }
Je ne veux pas utiliser code> code> Je souhaite utiliser dictionnaire code> comme indiqué dans ma question
Vous pouvez modifier votre modèle en:
public class Portfolio { public string Name {get; set;} public List<Position> Positions {get; set;} }
Je ne veux pas utiliser code> code> Je souhaite utiliser dictionnaire code> comme indiqué dans ma question
"Comme indiqué dans ma question" I> Où?
Y a-t-il quelque chose de mal à changer votre modèle d'objet pour le portefeuille au ci-dessous? Je pense que cela serait sérialisé comment vous voudriez. Vous devrez probablement utiliser LINQ pour trouver l'objet que vous souhaitez dans la liste. Cela suppose également qu'il y aura toujours un ticker unique
public class Portfolio { public string Name {get; set;} public List<Position> Positions {get; set;} }
Je ne veux pas utiliser code> code> Je souhaite utiliser dictionnaire code> comme indiqué dans ma question
Vous pouvez ajouter un personnalisé Tout d'abord, définissez le convertisseur suivant: p> puis appliquez-le à votre modèle suit: p> ou, utilisez-le dans des paramètres comme suit: p> bien sûr que le convertisseur suppose que la clé de dictionnaire et le nom du ticker est identique. P> Demo Fiddle ici . P> P> P> P> P> P> P> P> P> P > jsonconverter code> A> Pour
Dictionnaire
facilement L'option la plus simple consistera à écrire un modèle distinct utilisé à des fins de sérialisation:
classes: p> utilisation: p> //The portfolio class you want to work with (dictionary property)
var portfolio = new Portfolio()
{
Name = "MyPortfolio",
Positions = new Dictionary<string, UserQuery.Position>()
{
{ "AOS", new Position() { Size = 10, Ticker = "AOS"}},
{ "ABT", new Position() { Size = 100, Ticker = "ABT"}}
}
};
//Only used for serialization
var forSerialization = new PortfolioForSerialization()
{
Name = portfolio.Name,
Positions = portfolio.Positions.Select(p => p.Value).ToArray()
};
string serialized = JsonConvert.SerializeObject(forSerialization);
//On deserialization, map the array back to a dictionary
var deserializedPortfolio = JsonConvert.DeserializeObject<PortfolioForSerialization>(serialized);
//Map the serialization model back to your working model
var workingPortfolio = new Portfolio()
{
Name = deserializedPortfolio.Name,
Positions = deserializedPortfolio.Positions.ToDictionary(k => k.Ticker, v => v)
};