0

I am using NewtonSoft.JSON to parse my data. My goal is to create an object called SalesLines that contains a List:

public class SalesLines
{
   public List<SalesLine> SalesLines {get; set;}
}

My data is sometimes an array and sometimes an object:

 "SaleLines": {
"SaleLine": [
      {
        "saleLineID": "3963",

        },
        }]}



"SaleLines": {
    "SaleLine": { "salesLineID": "3333" };

How do I create a POCO in this scenario? My current solutions works, but it is messy:

string salesLineJson = sale.SaleLines.SaleLine.ToString();

var salesLineToken = JToken.Parse(salesLineJson);

if (salesLineToken is JArray)
{                     
   sale.SaleLines.Lines.AddRange(JArray.Parse(salesLineJson).ToObject<List<SaleLine>>());
}
else if (salesLineToken is JObject)
{
   sale.SaleLines.Lines.Add(JObject.Parse(salesLineJson).ToObject<SaleLine>());
}
Joseph Anderson
  • 4,114
  • 4
  • 45
  • 99
  • Is there an option to "fix" the source of your data so it's _always_ an array, so it matches your target object type all the time? – James Thorpe Nov 24 '14 at 22:24
  • Sorry, there is no option. The data is messed up, I believe. – Joseph Anderson Nov 24 '14 at 22:39
  • In that case, then yes you're probably stuck with code like the above. You could probably refactor it into a subclass of `JsonConverter` that you can pass an instance of to `Deserialize` so it's in a useful helper class for reuse elsewhere, but at some point you're going to have to manually check the token as you've done already – James Thorpe Nov 24 '14 at 22:47

0 Answers0