0
votes

Comment persister un modèle d'objet à JSON et sérialiser un dictionnaire que son éventail de valeurs?

{
  "Name": "SP500",
  "Positions": 
  [
      {
        "Ticker": "AOS",
        "Size": 100,
      },
      {
        "Ticker": "ABT",
        "Size": 100,
      }
  ]
}

0 commentaires

5 Réponses :


1
votes

Utilisez ceci:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}


1 commentaires

Je ne veux pas utiliser Je souhaite utiliser dictionnaire comme indiqué dans ma question



0
votes

Vous pouvez modifier votre modèle en:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}


2 commentaires

Je ne veux pas utiliser Je souhaite utiliser dictionnaire comme indiqué dans ma question


"Comme indiqué dans ma question" Où?



0
votes

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;}
}


1 commentaires

Je ne veux pas utiliser Je souhaite utiliser dictionnaire comme indiqué dans ma question




0
votes

facilement L'option la plus simple consistera à écrire un modèle distinct utilisé à des fins de sérialisation:

classes: p> xxx pré>

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)
};



0 commentaires