Я использую RestSharp и хотел бы, чтобы JSON сериализовал запрос с именем класса DTO в качестве корневого элемента. Вот пример DTO класс:Сериализовать объект с именем класса как корневым элементом
public class NewToken {
public string user_name { get; set; }
public string password { get; set; }
public string audience { get; set; }
}
Я хотел бы запрос сгенерированного быть:
{ "NewToken" : { "user_name": "asdf", "password": "asdfasdf", "audience": "test" }}
Я понимаю, что я могу использовать анонимный класс, такие как this, но есть способ, я могу сделать это автоматически используя имя класса как корневой элемент?
Вот еще несколько фрагментов коды для клиента API:
public abstract class ApiBase
{
internal string _defaultServer = Properties.Settings.Default.DefaultServer;
internal int _defaultPort = Properties.Settings.Default.DefaultPort;
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.AddHandler("application/json", new CustomJsonSerialiser());
client.BaseUrl = new Uri($"https://{this._defaultServer}:{this._defaultPort}");
client.CookieContainer = new CookieContainer();
var response = client.Execute<T>(request);
return response.Data;
}
internal RestRequest CreateBasicRequest()
{
var request = new RestRequest();
request.RequestFormat = DataFormat.Json;
request.JsonSerializer = new CustomJsonSerialiser();
request.AddHeader("Accept", "application/json, application/binary");
request.AddHeader("Content-Type", "application/json");
return request;
}
internal RestRequest CreateAuthenticatedRequest(string tokenId)
{
var request = this.CreateBasicRequest();
request.AddHeader("Authorization", $"Bearer {tokenId}");
return request;
}
}
public class SessionManager : ApiBase
{
public SessionManager() { }
public SessionManager(string server, int port)
{
this._defaultServer = server;
this._defaultPort = port;
}
public Token GetToken()
{
var request = this.CreateBasicRequest();
request.Method = Method.POST;
request.Resource = "token";
request.AddBody(new { NewToken = new NewToken() { user_name = "dotnet", password = "dotnetdotnet", audience = "api" } });
var token = Execute<Token>(request);
return token;
}
public Token RenewToken(Token token)
{
var request = this.CreateAuthenticatedRequest(token.id);
request.Method = Method.POST;
request.Resource = "token-renew";
var new_token = Execute<Token>(request);
return new_token;
}
}
В SessionManager.GetToken()
Я создаю анонимный объект, чтобы получить его правильно сериализацию. Я после автоматизированного пути, что-то интегрированное в процесс сериализации, которое обернет объект в корневой элемент с тем же именем, что и класс DTO.
глядя на ссылку вы поставляется, Json.Net может добавить тип объектов. вы можете использовать это, я думаю? – Noctis
Что произойдет, если свойство в NewToken было нестандартным? 'public Person User {get; задавать; } '. Как это будет сериализовано? – Rob