using Microsoft.Extensions.Logging;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
static async Task Main(string[] args)
var loggerFactory = LoggerFactory.Create(builder =>
.SetMinimumLevel(LogLevel.Information)
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Start program...");
var e1 = new AIS.Server("https://demo.steltix.com/jderest/v2/", loggerFactory.CreateLogger<AIS.Server>());
e1.AuthRequest.username = "demo";
e1.AuthRequest.password = "demo";
await e1.AuthenticateAsync();
var rs = await e1.RequestAsync<JsonElement>(new F4311.Request
matchType = AIS.Query.MATCH_ALL,
controlId = "F4311.NXTR",
@operator = AIS.Condition.EQUAL,
specialValueId = AIS.Value.LITERAL
var qry = JsonSerializer.Deserialize<F4311.Response>(rs.GetRawText(), new JsonSerializerOptions
new DynamicJsonConverter()
var d = qry.fs_DATABROWSE_F4311.data.gridData;
Console.WriteLine("Returned {0} records, there are {1}more.", d.summary.records, d.summary.moreRecords ? string.Empty : "no ");
foreach (dynamic r in d.rowset)
Console.WriteLine("{0,8} {1} {2,8} {3,-20} {4,-30} {5,-30} {6,12} {7,14:N}", r.F4311_DOCO, r.F4311_DCTO, r.F4311_AN8, r.F4311_LITM, r.F4311_DSC1, r.F4311_DSC2, r.F4311_UORG, r.F4311_AEXP);
Console.WriteLine(ex.Message);
logger.LogInformation("Program end!");
public class DynamicJsonConverter : JsonConverter<DynamicJsonElement>
public override DynamicJsonElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
return new DynamicJsonElement(JsonSerializer.Deserialize<JsonElement>(ref reader, options));
public override void Write(Utf8JsonWriter writer, DynamicJsonElement value, JsonSerializerOptions options)
throw new NotImplementedException();
public class DynamicJsonElement : DynamicObject
public JsonElement Element { get; }
public override bool TryGetMember(GetMemberBinder binder, out object result)
result = Element.GetProperty(binder.Name);
public JsonElement.ObjectEnumerator GetEnumerator()
return Element.EnumerateObject();
public DynamicJsonElement(JsonElement element)
public class Response : AIS.FormResponse
public AIS.Form<AIS.FormData<DynamicJsonElement>> fs_DATABROWSE_F4311 { get; set; }
public class Request : AIS.DatabrowserRequest
dataServiceType = BROWSE;
returnControlIDs = @"KCOO|DOCO|DCTO|SFXO|LNID|MCU|CO|OKCO|OORN|OCTO|OGNO|RKCO|RORN|RCTO|RLLN|AN8|SHAN|
DRQJ|TRDJ|PDDJ|OPDJ|ADDJ|CNDJ|PEFJ|PPDJ|PSDJ|DSVJ|DGL|PN|VR01|VR02|ITM|LITM|LOCN|LOTN|DSC1|DSC2|
LNTY|NXTR|LTTR|UOM|UORG|UCHG|UOPN|UREC|CREC|URLV|OTQY|PRRC|AEXP|ACHG|AOPN|AREC|ARLV|AMC3|ECST|
CSTO|CSMP|PTC|TX|EXR1|TXA1|UOM1,PQOR|UOM2|SQOR|CTRY|FY|LT|ANI|AID|OMCU|OBJ|SUB|SBLT|SBL";