Tom
Tom

Reputation: 16276

ServiceStack formats - XML showing data, others not

When I run this code, the data is not displaying, and I got a blank screen. If I click "in other formats: json" it returns "{ }" blank data.

However, it actually has data in it. If I click "in other formats: xml" it returns full data.

So, why is my XML working, but my HTML and JSON showing me blank screen?

[Route("customers", "GET")]
[Route("customers/{Id}", "GET")]
[Route("customers/page/{Page}", "GET")]
[Route("customers/page/{Page}/size/{Size}", "GET")]
[Route("customers/{Id}/orders", "GET")]
[Route("customers/{Id}/orders/page/{Page}", "GET")]
[Route("customers/{Id}/orders/page/{Page}/size/{Size}", "GET")]
public class Customers {
    public Customers() { Page = 1; Size = 20; }
    public string Id { get; set; }
    public int Page { get; set; }
    public int Size { get; set; }
}
public class CustomersResponse {
    public IList<Customer> Customers;
    public int Pages;
}
public class CustomerDetailResponse {
    public Customer Customer;
    public IList<Order> Orders;
    public int Pages;
}
public class CustomersService : BaseService {
    public ICustomersManager CustomersManager { get; set; }
    public IOrdersManager OrdersManager { get; set; }
    public IValidator<Customers> Validator { get; set; }  
    public object Get(Customers req) {
        var result = Validator.Validate(req);
        if(!result.IsValid) return result.ToResponseDto();
        if (req.Id == null) {
            return new CustomersResponse {
                Customers = CustomersManager.GetCustomers(req), 
                Pages = CustomersManager.GetCustomersPageCount(req) };
        }
        else {
            return new CustomerDetailResponse {
                Customer = CustomersManager.GetCustomer(req), 
                Orders = OrdersManager.GetOrders(req), 
                Pages = OrdersManager.GetOrdersPageCount(req) };
        }
    }
}

Upvotes: 1

Views: 67

Answers (1)

mythz
mythz

Reputation: 143399

By default ServiceStack's Text Serializers only serializes public properties, your DTO's have a mix of fields and properties. Either change them all your DTOs to public properties or add this in your AppHost.Configure():

ServiceStack.Text.JsConfig.IncludePublicFields = true;

Upvotes: 1

Related Questions