servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 重写ServiceStack中的字段名反序列化

C# 重写ServiceStack中的字段名反序列化,c#,servicestack,C#,servicestack,我有一个使用autoquery的服务,它的响应dto如下所示 [DataContract(Name = "list_item", Namespace = "")] public class ListItem { [DataMember(Name = "list_id",)] public String ListId { get; set; } [DataMember(Name = "first_name")] public String FirstName {

我有一个使用autoquery的服务,它的响应dto如下所示

[DataContract(Name = "list_item", Namespace = "")]
public class ListItem
{
    [DataMember(Name = "list_id",)]
    public String ListId { get; set; }
    [DataMember(Name = "first_name")]
    public String FirstName  { get; set; }
}

当我使用不带空格的自动查询时,它会返回正确的结果,但使用空格时,自动查询不起作用

在apphost.cs中,我添加了以下代码

 private void ConfigSerializer(Container container)
    {                       
        JsConfig.PropertyConvention = PropertyConvention.Lenient;
        JsConfig.EmitLowercaseUnderscoreNames = true;
}

但当我使用下划线时,仍然无法得到结果。 我缺少什么?

这显示了自动查询支持带有自定义别名字段的请求DTO,如此自动查询服务中所示:

[DataContract]
[Route("/rockstars")]
public class QueryRockstars : QueryBase<Rockstar>
{
    [DataMember(Name = "first_name")]
    public string FirstName { get; set; }
}
ServiceStack也已更新,以查看基础表上的任何匹配别名,因此现在您可以在查询表上使用字段约定,例如:

[Route("/search")]
public class QueryPerson : QueryBase<Person> {}

[DataContract]
public class Person
{
    [DataMember]
    public int Id { get; set; }

    [DataMember(Name = "first_name")]
    public string FirstName { get; set; }

    [DataMember]
    public string LastName { get; set; }
}

var response = "http://example.org/search"
    .AddQueryParam("first_name", "Jimi")
    .GetJsonFromUrl()
    .FromJson<QueryResponse<Person>>();

response.PrintDump();
这些更改可从现在的v4.0.41+中获得

[Route("/search")]
public class QueryPerson : QueryBase<Person> {}

[DataContract]
public class Person
{
    [DataMember]
    public int Id { get; set; }

    [DataMember(Name = "first_name")]
    public string FirstName { get; set; }

    [DataMember]
    public string LastName { get; set; }
}

var response = "http://example.org/search"
    .AddQueryParam("first_name", "Jimi")
    .GetJsonFromUrl()
    .FromJson<QueryResponse<Person>>();

response.PrintDump();
JsConfig.EmitLowercaseUnderscoreNames = true;

var response = "http://example.org/search"
    .AddQueryParam("last_name", "Hendrix")
    .GetJsonFromUrl()
    .FromJson<QueryResponse<Person>>();