using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public string action { get; set; }
public class ClientConnect {
public string name { get; set; }
public string pasww { get; set; }
public class ClientMessage {
public string name { get; set; }
public string pasww { get; set; }
public string name { get; set; }
public string content { get; set; }
public int num { get; set; }
public int num2 { get; set; }
public interface IBody {}
public Header header { get; set; } = new Header();
public IBody body { get; set; }
public class GetBody : IBody
public string name { get; set; }
public class UpdateBody : IBody
public string name { get; set; }
public string content { get; set; }
public class Controller {
public void Update(string name, string content) {
Console.WriteLine($"update book named {name} to have content {content}");
public void Get(string name) {
Console.WriteLine("client wants to get a book - send it back");
public class RequestHandler {
private readonly Controller controller;
public RequestHandler(Controller controller) {
this.controller = controller;
public void HandleRequest2(string str) {
JObject j = JObject.Parse(str);
switch (j["header"]["action"].ToString()) {
UpdateBody body = JsonConvert.DeserializeObject<UpdateBody>(j["body"].ToString());
controller.Update(body.name, body.content);
GetBody body = JsonConvert.DeserializeObject<GetBody>(j["body"].ToString());
controller.Get(body.name);
default: Console.WriteLine("BOOM"); break;
public static void Main()
string str = "{\"header\":{\"action\":\"UPDATE\"},\"body\":{\"name\":\"Hobbit\",\"content\":\"asdfasdfsd\",\"num\":42,\"num2\":0}}";
Controller control = new Controller();
RequestHandler handler = new RequestHandler(control);
handler.HandleRequest2(str);
str = "{\"header\":{\"action\":\"GET\"},\"body\":{\"name\":\"Hobbit\"}}";
handler.HandleRequest2(str);