تنظیمات JSON در ASP.NET Web API
نویسنده: وحید نصیری
تاریخ: ۱۳۹۳/۰۶/۲۱ ۱۳:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
namespace WebApiSelfHostTests
{
public class UsersController : ApiController
{
public IEnumerable<User> GetAllUsers()
{
return new[]
{
new User{ Id = 1, Name = "User 1", Type = UserType.Admin },
new User{ Id = 2, Name = "User 2", Type = UserType.User }
};
}
public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
var jsonContent = await request.Content.ReadAsStringAsync();
Console.WriteLine("JsonContent (Server Side): {0}", jsonContent);
return new HttpResponseMessage(HttpStatusCode.Created);
}
}
} namespace WebApiSelfHostTests
{
public enum UserType
{
User,
Admin,
Writer
}
public class User
{
public int Id { set; get; }
public string Name { set; get; }
public UserType Type { set; get; }
}
} using System.Web.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Owin;
namespace WebApiSelfHostTests
{
/// <summary>
/// PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
/// </summary>
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
} var server = WebApp.Start<Startup>(url: BaseAddress);
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
server.Dispose(); using (var client = new HttpClient())
{
var response = client.GetAsync(BaseAddress + "api/users").Result;
Console.WriteLine("Response: {0}", response);
Console.WriteLine("JsonContent (Client Side): {0}", response.Content.ReadAsStringAsync().Result);
} JsonContent (Client Side): [{"Id":1,"Name":"User 1","Type":1},{"Id":2,"Name":"User 2","Type":0}] public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
{
Converters = { new StringEnumConverter() }
}; JsonContent (Client Side): [{"Id":1,"Name":"User 1","Type":"Admin"},{"Id":2,"Name":"User 2","Type":"User"}] var user = new User
{
Id = 1,
Name = "User 1",
Type = UserType.Writer
};
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync(BaseAddress + "api/users", user).Result;
Console.WriteLine("Response: {0}", response); JsonContent (Server Side): {"Id":1,"Name":"User 1","Type":2} var jsonMediaTypeFormatter = new JsonMediaTypeFormatter
{
SerializerSettings = new JsonSerializerSettings
{
Converters = { new StringEnumConverter() }
}
};
var response = client.PostAsync(BaseAddress + "api/users", user, jsonMediaTypeFormatter).Result;
Console.WriteLine("Response: {0}", response); JsonContent (Server Side): {"Id":1,"Name":"User 1","Type":"Writer"} using System;
using System.IO;
using System.Net;
using Newtonsoft.Json;
namespace WebToolkit
{
public class SimpleHttp
{
public HttpStatusCode PostAsJson(string url, object data, JsonSerializerSettings settings)
{
if (string.IsNullOrWhiteSpace(url))
throw new ArgumentNullException("url");
return PostAsJson(new Uri(url), data, settings);
}
public HttpStatusCode PostAsJson(Uri url, object data, JsonSerializerSettings settings)
{
if (url == null)
throw new ArgumentNullException("url");
var postRequest = (HttpWebRequest)WebRequest.Create(url);
postRequest.Method = "POST";
postRequest.UserAgent = "SimpleHttp/1.0";
postRequest.ContentType = "application/json; charset=utf-8";
using (var stream = new StreamWriter(postRequest.GetRequestStream()))
{
var serializer = JsonSerializer.Create(settings);
using (var writer = new JsonTextWriter(stream))
{
serializer.Serialize(writer, data);
writer.Flush();
}
}
using (var response = (HttpWebResponse)postRequest.GetResponse())
{
return response.StatusCode;
}
}
}
} public string RemoveControlCharacters1(string input)
{
string output = Regex.Replace(input, @"[\u0000-\u001F]", string.Empty);
return output;
}
public string RemoveControlCharacters2(string input)
{
string output = new string(input.Where(c => !char.IsControl(c)).ToArray());
return output;
}
public string RemoveControlCharacters3(string inString)
{
if (inString == null) return null;
StringBuilder newString = new StringBuilder();
char ch;
for (int i = 0; i < inString.Length; i++)
{
ch = inString[i];
if (!char.IsControl(ch))
{
newString.Append(ch);
}
}
return newString.ToString();
} new JsonSerializerSettings
{
Error = (sender, eventArgs) =>
{
Debug.WriteLine(eventArgs.ErrorContext.Error.Message);
//if an error happens we can mark it as handled, and it will continue
eventArgs.ErrorContext.Handled = true;
}
} var items = JsonConvert.DeserializeObject<List<Classified>>(json);
myUserApi.Id = UserId;
return new JsonNetResult
{
Data = myUserApi,
ContentType = "application/json"
}; {
"$id": "1",
"Settings": {
"$id": "2",
"ReferenceLoopHandling": 0,
"MissingMemberHandling": 0,
"ObjectCreationHandling": 0,
"NullValueHandling": 0,
"DefaultValueHandling": 0,
"Converters": [],
"PreserveReferencesHandling": 0,
"TypeNameHandling": 0,
"MetadataPropertyHandling": 0,
"TypeNameAssemblyFormat": 0,
"ConstructorHandling": 0,
"ContractResolver": null,
"ReferenceResolver": null,
"TraceWriter": null,
"Binder": null,
"Error": null,
"Context": {
"$id": "3",
"m_additionalContext": null,
"m_state": 0
},
"DateFormatString": "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK",
"MaxDepth": null,
"Formatting": 0,
"DateFormatHandling": 0,
"DateTimeZoneHandling": 3,
"DateParseHandling": 1,
"FloatFormatHandling": 0,
"FloatParseHandling": 0,
"StringEscapeHandling": 0,
"Culture": "(Default)",
"CheckAdditionalContent": false
},
"ContentEncoding": null,
"ContentType": "application/json",
"Data": "{\"Id\":2}",
"JsonRequestBehavior": 1,
"MaxJsonLength": null,
"RecursionLimit": null
}