8

Code below generates output as {"error_message":null,"status":"InvalidRequest"} where I would like to get it as {"error_message":null,"status":"INVALID_REQUEST"}

So simply, I was wondering how to honor PropertyName attribute while serializing with JSON.NET?

void Main()
{
    var payload = new GooglePlacesPayload();
    payload.Status = StatusCode.InvalidRequest;
    JsonConvert.SerializeObject(payload).Dump();
}

public class GooglePlacesPayload
{
    [JsonProperty(PropertyName = "error_message")]
    public string ErrorMessage { get; set; }

    [JsonProperty(PropertyName = "status")]
    [JsonConverter(typeof(StringEnumConverter))]
    public StatusCode Status { get; set; }
}

[Flags]
public enum StatusCode
{
    // reference https://developers.google.com/maps/premium/previous-licenses/articles/usage-limits#limitexceeded
    // reference https://developers.google.com/places/web-service/search#PlaceSearchStatusCodes

    None = 0,

    // indicates that no errors occurred; the place was successfully detected and at least one result was returned.
    [JsonProperty(PropertyName = "OK")]
    Ok = 1,
    // indicates that the search was successful but returned no results. This may occur if the search was passed a latlng in a remote location.
    [JsonProperty(PropertyName = "ZERO_RESULTS")]
    ZeroResults = 2,
    // indicates that you are over your quota.  The daily quotas are reset at midnight, Pacific Time.
    [JsonProperty(PropertyName = "OVER_QUERY_LIMIT")]
    OverQueryLimit = 4,
    // indicates that your request was denied, generally because of lack of an invalid key parameter.
    [JsonProperty(PropertyName = "REQUEST_DENIED")]
    RequestDenied = 8,
    // generally indicates that a required query parameter (location or radius) is missing.
    [JsonProperty(PropertyName = "INVALID_REQUEST")]
    InvalidRequest = 16,

    // When the Google Places service returns a status code other than OK, there may be an additional error_message field within the search response object. 
    // This field contains more detailed information about the reasons behind the given status code.
    Positive = Ok | ZeroResults,
    Negative = OverQueryLimit | RequestDenied | InvalidRequest

}
2
  • I made the assumption that you are looking for any way to change the serialization of an enum. If you're specifically looking for a way to use PropertyName, feel free to revert and add an update to your question to that effect. Commented Nov 29, 2016 at 20:01
  • You assumption was correct. Thank you! Commented Nov 29, 2016 at 20:03

1 Answer 1

5

[EnumMember(Value="INVALID_REQUEST")] should do it. Note this is a dotnet core attribute, not newtonsoft-specific, so it may affect other things as well.

Sign up to request clarification or add additional context in comments.

2 Comments

Luckily I'm on dotnet-core 😉 It looks like as long as you add System.Runtime.Serialization it works on both world by the way. 😎 Thank you! 🤗
@cilerler Heh, I meant "a core attribute of dotnet", not "an attribute of dotnet-core". Naming things....

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.