Существует ли простой способ заполнить мой Объект C# с объектом JSON, переданным через Ajax?
Это - Объект JSON, переданный C# WEBMETHOD от страницы с помощью JSON.stringify
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C# WebMetod, Который получает Объект JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Класс C#, который представляет структуру объекта Объекта JSON, передал в WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Хороший способ использовать JSON в C # - это JSON.NET
Краткое руководство и документация по API из JSON .NET - Официальный сайт поможет вам с этим работать.
Пример использования:
public class User
{
public User(string json)
{
JObject jObject = JObject.Parse(json);
JToken jUser = jObject["user"];
name = (string) jUser["name"];
teamname = (string) jUser["teamname"];
email = (string) jUser["email"];
players = jUser["players"].ToArray();
}
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
// Use
private void Run()
{
string json = @"{""user"":{""name"":""asdf"",""teamname"":""b"",""email"":""c"",""players"":[""1"",""2""]}}";
User user = new User(json);
Console.WriteLine("Name : " + user.name);
Console.WriteLine("Teamname : " + user.teamname);
Console.WriteLine("Email : " + user.email);
Console.WriteLine("Players:");
foreach (var player in user.players)
Console.WriteLine(player);
}
JSON.Net - лучший выбор, но, в зависимости от формы объектов и наличия круговых зависимостей, вы можете использовать JavaScriptSerializer или DataContractSerializer.
Чтобы варианты оставались открытыми, если вы используете .NET 3.5 или новее, вот пример, который вы можете использовать прямо из фреймворка с помощью Generics. Как уже упоминалось, если это не просто объекты, вам действительно стоит использовать JSON.net.
public static string Serialize<T>(T obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
string retVal = Encoding.UTF8.GetString(ms.ToArray());
return retVal;
}
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
ms.Close();
return obj;
}
Вам понадобится:
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
Учитывая ваш пример кода, вам не нужно делать ничего другого.
Если вы передадите эту строку JSON в ваш веб-метод, он автоматически разберет строку JSON и создаст заполненный объект User в качестве параметра для вашего метода SaveTeam.
В целом, вы можете использовать класс JavascriptSerializer
, как показано ниже, или для большей гибкости использовать любой из различных Json-фреймворков (Jayrock JSON - хороший) для простого манипулирования JSON.
JavaScriptSerializer jss= new JavaScriptSerializer();
User user = jss.Deserialize<User>(jsonResponse);