title: Utf8Json deserialize to type based on marker field
body: <p>With <code>Json.NET - Newtonsoft</code> I have successfully used custom contract deserializers and json converter to select the deserializer based on a tag (in the case below <code>ev</code>).</p>
  
  <p>In summary <strong>I am looking to achieve the same with <code>Utf8Json</code></strong>, full details below:</p>
  
  <pre><code>// Stocks TRADE:
  {
      "ev": "T",              // Event Type
      "sym": "MSFT",          // Symbol Ticker
      "x": "4",               // Exchange ID
      "i": 12345,             // Trade ID
      "z": 3,                 // Tape ( 1=A 2=B 3=C)
      "p": 114.125,           // Price
      "s": 100,               // Trade Size
      "c": [0, 12],           // Trade Conditions
      "t": 1536036818784      // Trade Timestamp ( Unix MS )
  }
  
  // Stocks QUOTE:
  {
      "ev": "Q",              // Event Type
      "sym": "MSFT",          // Symbol Ticker
      "bx": "4",              // Bix Exchange ID
      "bp": 114.125,          // Bid Price
      "bs": 100,              // Bid Size
      "ax": "7",              // Ask Exchange ID
      "ap": 114.128,          // Ask Price
      "as": 160,              // Ask Size
      "c": 0,                 // Quote Condition
      "t": 1536036818784      // Quote Timestamp ( Unix MS )
  }
  
  // Stocks Aggregate:
  {
      "ev": "AM",             // Event Type ( A = Second Agg, AM = Minute Agg )
      "sym": "MSFT",          // Symbol Ticker
      "v": 10204,             // Tick Volume
      "av": 200304,           // Accumulated Volume ( Today )
      "op": 114.04,           // Todays official opening price
      "vw": 114.4040,         // VWAP (Volume Weighted Average Price)
      "o": 114.11,            // Tick Open Price
      "c": 114.14,            // Tick Close Price
      "h": 114.19,            // Tick High Price
      "l": 114.09,            // Tick Low Price
      "a": 114.1314,          // Tick Average / VWAP Price
      "s": 1536036818784,     // Tick Start Timestamp ( Unix MS )
      "e": 1536036818784,     // Tick End Timestamp ( Unix MS )
  }
  </code></pre>
  
  <p>And a text stream that can consist of any of the above types:</p>
  
  <pre><code>[{"ev":"A","sym":"DAL","v":1,"av":1, ...snipped...},{"ev":"T","sym":"MSFT","p":114.11,"x":"4","s":67,"t":1586418423607, ...snipped... }]
  </code></pre>
  
  <p>And deserialize to:</p>
  
  <pre><code>class Message
  {
     List&lt;Trade&gt; Trades { get; set; }
     List&lt;Quote&gt; Quotes { get; set; }
     List&lt;Aggregate&gt; Aggs { get; set; }
  }
  </code></pre>
  
  <p>I am currently doing this, which works, but doubt is as performant as direct deserialization into POCO:</p>
  
  <pre><code>var array = JsonSerializer.Deserialize&lt;dynamic&gt;(@"[{""ev"":""A"",""sym"":""AAL"",""v"":1500,""av"":119037385,""op"":12.64,""vw"":13.1,""o"":13.1,""c"":13.1,""h"":13.1,""l"":13.1,""a"":12.6655,""z"":500,""s"":1586472438000,""e"":1586472439000},{""ev"":""A"",""sym"":""AAL"",""v"":6000,""av"":119043385,""op"":12.64,""vw"":13.1,""o"":13.1,""c"":13.1,""h"":13.1,""l"":13.1,""a"":12.6655,""z"":1000,""s"":1586472439000,""e"":1586472440000},{""ev"":""A"",""sym"":""AAL"",""v"":3000,""av"":119046385,""op"":12.64,""vw"":13.11,""o"":13.11,""c"":13.11,""h"":13.11,""l"":13.11,""a"":12.6655,""z"":1000,""s"":1586472440000,""e"":1586472441000}]");
  
  foreach(var item in array)
  {
      if(item["ev"]=="A")
      {
          var aggregate = new OpenHighLowClose(
              DateTimeOffset.FromUnixTimeMilliseconds((long)item["s"]),
              (decimal)item["op"],
              (decimal)item["h"],
              (decimal)item["l"],
              (decimal)item["c"],
              (decimal)item["v"]);
      }
      else if(item["ev"=="AM"]) { }
      else if(item["ev" == "T"]) { }
      else if(item["ev" == "Q"]) { }
  }
  </code></pre>
  
  <p>What is the <em>equivalent of json.net's JsonConverter</em> in <strong>Utf8Json</strong>, so I can switch the deserializer based on the EV field (and associated string value of either T, A, AM or Q)?</p>
  
  <p>Just to add, i am going from JSON to and want to OpenHighLowClose POCO which I will then send out via message pack... is there any way to skip this intermediate step?</p>