I'm trying to figure out how I can specify alternate property names with ASP.NET WebApi - and have it work for deserialization + serialization, and for JSON + XML. I've only uncovered partial solutions so far.
I want to expose the property names as lower case with underscores, and (for example's sake) have different internal names:
External:
Internal:
For testing, here's a POST controller action that just relays what it receives:
// POST api/values
public TestSerialization Post([FromBody]TestSerialization value)
{
return value;
}
And a test entity:
public class TestSerialization
{
[DataMember(Name = "field_one")] // Doesn't appear to change anything
public string ItemOne { get; set; }
[JsonProperty(PropertyName = "field_two")] // Only works for serialization in JSON mode
public string ItemTwo { get; set; }
}
So far, I've found:
For test data, I submit 4 properties, to see which value gets deserialized, and what the property name is on deserialization
How can I achieve this?
Some of your findings/conclusions are incorrect...you can try the following instead:
This should work for both default Xml & Json formatters of web api and for both serialization & deserialization.
[DataContract]
public class TestSerialization
{
[DataMember(Name = "field_one")]
public string ItemOne { get; set; }
[DataMember(Name = "field_two")]
public string ItemTwo { get; set; }
}
The following should work for Json formatter only and for both serialization & deserialization.
public class TestSerialization
{
[JsonProperty(PropertyName = "field_one")]
public string ItemOne { get; set; }
[JsonProperty(PropertyName = "field_two")]
public string ItemTwo { get; set; }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With