ACMEMAPPER
has been developed focusing on mapping definition maintainability & lisibility over flexibility & performance: mapping definitions are declared in JSON and reloaded on each new ACMEMAPPER
object. Many source or destination objects type are supported such JObject
or any POCO
ones.
ACMEMAPPER
has been initiality developed in context of an Enterprise Service Bus which has to support & manage many mapping activities and update mapping definitions without re-build & deploy.
Mapping definition
{
"myobjecttype" : [
{
"systemA" : "systemAfield1",
"systemB" : "systemBfield1"
},
{
"systemA" : "systemAfield2",
"systemB" : "systemBfield2"
}
]
}
C# source code with
using acmemapper;
...
var mapper = new Mapper("systemA", "systemB");
var output = mapper.Map<JObject,JObject>("myobjecttype",new JObject { { "systemAfield1" , "mystringvalue" } });
JObject/JSON output
{
"systemBfield1" : "mystringvalue"
}
A sligthly more complex mapping definition including modifiers
{
"myobjecttype": [
{
"systemA": "systemAfield2",
"systemB": {
"property": "systemBfield2",
"fromsubproperty": "nestedsourceproperty",
"tosubproperty": "nesteddestinationproperty",
"ignoreIfNull": true,
"invoke": "ToUpperInvariant",
"map": {
"MYSTRINGVALUE": "mappedvalueinupperletter",
"mystringvalue": "mappedvalueinsmallletter",
"myintegervalue": 1,
"$default": false
}
}
}
]
}
JSON input
{
"systemAfield2": {
"nestedsourceproperty": "mystringvalue"
}
}
JSON output
{
"systemBfield2": {
"nesteddestinationproperty": "mappedvalueinupperletter"
}
}
- Double direction mapping
- Nested JSON content mapping
- 1...N mapping definition
- N...1 overwrite support
- N...array support
- POCO basic object composition
- Control flags :
Ignore
/IgnoreIfNull
- Basic casting
- Basic transformation : switch (
map
) - Parameterless method invokation (eg.
ToLowerInvariant
) - Basic regex support (
regex
)
modifiers
orders
ACMEMAPPER
supports by design several entity definitions and no limitation of source & destination systems (including both way mapping). By design, ACMEMAPPER
supports only as input 2 levels of data (either JSON or POCO object)
{
"level1field" : "value1",
"nestedobject" : {
"level2field" : "subvalue2"
}
}