Verwenden Sie einen anderen Namen für die Serialisierung und Deserialisierung mit Json.Net

Verwenden Sie einen anderen Namen für die Serialisierung und Deserialisierung mit Json.Net

Sie können den JsonSerializerSettings verwenden , der ContractResolver und die NamingStrategy.

public class ErrorDetails
{
    public int Id { get; set; }
    public string ErrorMessage { get; set; }
}

var json = "{'Id': 1,'error_message': 'An error has occurred!'}";

Zur Dezerialisierung können Sie den SnakeCaseNamingStrategy verwenden .

var dezerializerSettings = new JsonSerializerSettings
{
    ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = new SnakeCaseNamingStrategy()
    }
};
var obj = JsonConvert.DeserializeObject<ErrorDetails>(json, dezerializerSettings);

Um das Objekt erneut zu serialisieren, müssen Sie den JsonSerializerSettings nicht ändern als Standard wird der Eigenschaftsname verwendet.

var jsonNew = JsonConvert.SerializeObject(obj);

Oder Sie könnten einen Vertragslöser erstellen, der entscheiden kann, welcher Name verwendet werden soll. Dann können Sie beim Dezerialisieren und Serialisieren entscheiden, ob Sie das Pascal-Case-Namensformat oder das mit dem Unterstrich verwenden möchten.

public class CustomContractResolver : DefaultContractResolver
{
    public bool UseJsonPropertyName { get; }

    public CustomContractResolver(bool useJsonPropertyName)
    {
        UseJsonPropertyName = useJsonPropertyName;
    }

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);
        if (!UseJsonPropertyName)
            property.PropertyName = property.UnderlyingName;

        return property;
    }
}

public class ErrorDetails
{
    public int Id { get; set; }
    [JsonProperty("error_message")]
    public string ErrorMessage { get; set; }
}


var json = "{'Id': 1,'error_message': 'An error has occurred!'}";
var serializerSettings = new JsonSerializerSettings()
{
    ContractResolver = new CustomContractResolver(false)
};
var dezerializerSettings = new JsonSerializerSettings
{
    ContractResolver = new CustomContractResolver(true)
};

var obj = JsonConvert.DeserializeObject<ErrorDetails>(json, dezerializerSettings);
var jsonNew = JsonConvert.SerializeObject(obj, serializerSettings);