open System.Collections.Generic
open Microsoft.FSharp.Reflection
open Microsoft.FSharp.Core
open Newtonsoft.Json.Linq
open Newtonsoft.Json.Converters
open Newtonsoft.Json.Serialization
let readOnlyDict<'Key, 'Value when 'Key : equality>(input : seq<'Key * 'Value>) = new System.Collections.ObjectModel.ReadOnlyDictionary<'Key,'Value>(dict input) :> IReadOnlyDictionary<'Key, 'Value>
type CountResult = { Name : string; Count : int }
type CountResultCollection() =
inherit System.Collections.ObjectModel.KeyedCollection<string,CountResult>()
override this.GetKeyForItem i = i.Name
type CounterResponse (l : CountResult seq) =
let countList = CountResultCollection()
for c in l do countList.Add(c)
new() = CounterResponse(Seq.empty)
member this.CountResults = countList
member x.Lookup(s : string) = countList.Item(s).Count
let countResults = [| {Name = "Count01"; Count = count}; {Name = "Count02"; Count = count}; {Name = "Count03"; Count = count} |] |> Array.toSeq
let response = CounterResponse(countResults)
let json = JsonConvert.SerializeObject(response, Formatting.Indented)
for item in response.CountResults do
printfn "(%s, %i)" item.Name (response.Lookup(item.Name))
let response2 = JsonConvert.DeserializeObject<CounterResponse>(
{ "name": "Count01","count": 4 },
{ "name": "Count02", "count": 2 },
{ "name": "Count3", "count": 1 },
for item in response2.CountResults do
printfn "(%s, %i)" item.Name (response2.Lookup(item.Name))