2

I've traced through the my method (below) at run time. Below the code I've included a screenshot of the Debug examination of the Portfolios list just before the return statement. I've expanded a couple of the list entries. As you can see, each Portfolio object contains bona fide data - a numeric Id and a string name.

Yet, here's what comes back to the Chrome browser, or postman, no difference.

[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]

What's happening to all the data? Thanks for your help!

    // GET: api/Portfolio
    [HttpGet]
    public List<Portfolio> Get()
    {
        List<Portfolio> Portfolios = new List<Portfolio>();

        using (SqlConnection cn = new SqlConnection(conn))
        {
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandText = sqlSelectPortfolios;
            cn.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            Portfolio pf;

            while (rdr.Read())
            {
                pf = new Portfolio
                {
                    id = (int)rdr["PortfolioId"],
                    name = (string)rdr["PortfolioName"]
                };

                Portfolios.Add(pf);
            }
        }

        return Portfolios;
    }

Debug:

Debug Screenshot

Yossi G.
  • 939
  • 1
  • 8
  • 22
  • 1
    If id and name are fields and you're using System.Text.Json.JsonSerialiser than it won't serialise them as of Nov 2019. – tymtam Nov 10 '19 at 02:03
  • 1
    Does this answer your question? [How to use class fields with System.Text.Json.JsonSerializer?](https://stackoverflow.com/questions/58139759/how-to-use-class-fields-with-system-text-json-jsonserializer) – tymtam Nov 10 '19 at 02:04
  • What is your `Portfolio` class code? – Herohtar Nov 10 '19 at 03:03

1 Answers1

7

The id and name need to be public and properties. As of 3.0 System.Text.Json.JsonSerializer does not serialize fields.

public class Portfolio 
{
public int id {get; set;}
public string name {get; set;}
}
tymtam
  • 31,798
  • 8
  • 86
  • 126
  • Thank you!! I had them as public but not defined as properties. As soon as I redefined these as properties I got the expected results. – Yossi G. Nov 10 '19 at 03:36
  • 3
    The issue is logged as [JsonSerializer should support field as well as properties #36505](https://github.com/dotnet/corefx/issues/36505) – tymtam Nov 10 '19 at 03:37