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 CounterResponse () =
let mutable countsList:List<CountResult> = List<CountResult>()
let mutable countResultsLookup:IReadOnlyDictionary<string,int> = readOnlyDict [("", 0)]
[<JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace)>]
and set(value:List<CountResult>) =
countResultsLookup <- value |> Seq.map(fun c -> c.Name, c.Count) |> readOnlyDict
member x.Lookup(s) = countResultsLookup.Item(s)
let countResults = [| {Name = "Count01"; Count = count}; {Name = "Count02"; Count = count}; {Name = "Count03"; Count = count} |]
let response = CounterResponse(CountResults = System.Collections.Generic.List<CountResult>(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))