我在Javascript中有一个看起来像这样的对象
function MyObject(){
this.name="";
this.id=0;
this.....
}
然后我将这些对象的数组进行字符串化并将其发送到ASP.Net Web服务。
在webservice上,我想反序列化JSON字符串,以便我可以在C#中轻松处理数据。然后,我想将相同Javascript类型的对象数组(相同的字段名称和所有内容)发送回客户端。我不理解的是如何序列化说这个类:
class MyObject{
public string Name;
public int ID;
}
以便JSON与上面的javascript对象相同。以及如何反序列化到C#MyObject
类。
我怎么能轻易做到这一点?我正在使用Netwonsoft.Json。
有没有办法将JSON字符串转换为对象的List或Array?
答案 0 :(得分:4)
使用json.net,您可以使用JsonPropertyAttribute为序列化属性提供自定义名称:
class MyObject{
[JsonProperty(PropertyName = "name")]
public string Name;
[JsonProperty(PropertyName = "id")]
public int ID;
}
然后,您可以将对象序列化为List<>像这样:
var list = new List<MyObject>();
var o = new MyObject();
list.Add(o);
var json = JsonConvert.SerializeObject(list);
和反序列化:
// json would look like this "[{ "name":"", "id":0 }]"
var list = JsonConvert.DeserializeObject<List<MyObject>>(json);
答案 1 :(得分:0)
WebMethod
让你回来的一件事是一个“d”包装,我与之斗争了好几个小时才能到处走动。我使用Newtonsoft / JSON.NET库的解决方案如下。可能有一种更简单的方法可以让我知道。
public class JsonContainer
{
public object d { get; set; }
}
public T Deserialize<T>(string json)
{
JsonSerializer serializer = new JsonSerializer();
JsonContainer container = (JsonContainer)serializer.Deserialize(new StringReader(json), typeof(JsonContainer));
json = container.d.ToString();
return (T)serializer.Deserialize(new StringReader(json), typeof(T));
}
答案 2 :(得分:-1)
你可以试试DataContractJsonSerializer Rick Strahl有一个相当不错的例子。
告诉序列化程序你要序列化的类型,你可以修饰类属性,告诉他们期望一个不同的名字。
举个例子:
class MyObject{
[DataMember(name="name")]
public string Name;
[DataMember(name="id")]
public int ID;
}
编辑:使用
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
{
ser = new DataContractJsonSerializer(typeof(MyObject));
MyObject obj = ser.ReadObject(ms) as MyObject;
int myObjID = obj.ID;
string myObjName = obj.Name;
}