using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using AngleSharp.Html.Dom;
using AngleSharp.Html.Parser;
private static readonly Guid _fieldCodeId = Guid.NewGuid();
public static void Main()
var orderId = Guid.NewGuid();
var order = GetFullOrder(orderId);
var orderJson = JsonConvert.SerializeObject(order);
var orderJObject = JObject.Parse(orderJson);
Console.WriteLine(orderJson);
var mappings = LoadFieldCodeMappings();
var controls = LoadInputsFromForm();
foreach (var control in controls)
var fieldId = control.Key;
var inputElement = control.Value;
Console.WriteLine($"Field: {fieldId}");
if (mappings.TryGetValue(fieldId, out var path) &&
!string.IsNullOrWhiteSpace(path))
Console.WriteLine("Found mapping!");
var value = orderJObject.SelectToken(path)?.ToString();
if (!string.IsNullOrWhiteSpace(value))
inputElement.Value = value;
Console.WriteLine($"Setting '{fieldId}' to '{value}");
public static Order GetFullOrder(Guid orderId)
PropertyAddress = new Address
Address1 = "123 Main St",
public static IDictionary<Guid, string> LoadFieldCodeMappings()
return new Dictionary<Guid, string>
{ _fieldCodeId, "$.contacts[?(@.code == 'BA')][0].firstName" }
public static IDictionary<Guid, IHtmlInputElement> LoadInputsFromForm()
var source = $"<!DOCTYPE html><html><head></head><body><form><input id='input123' name='q1_{_fieldCodeId}' /></form></body></html>";
var context = BrowsingContext.New(Configuration.Default);
var parser = context.GetService<IHtmlParser>();
var document = parser.ParseDocument(source);
var inputElement = document.QuerySelectorAll("input").Single() as IHtmlInputElement;
return new Dictionary<Guid, IHtmlInputElement>
{ _fieldCodeId, inputElement }
public Guid Id { get; set; }
public Address PropertyAddress { get; set; }
public IEnumerable<Contact> Contacts { get; set; }
public string Address1 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Code { get; set; }
public string Email { get; set; }