![](/img/trans.png)
[英]How to serialize and deserialize a class with byte array as a member in c#
[英]How to serialize/deserialize a C# class?
我在Javascript中有一个看起来像这样的对象
function MyObject(){
this.name="";
this.id=0;
this.....
}
然后,我对那些对象的数组进行字符串化,然后将其发送到ASP.Net Web服务。
在Web服务中,我想反序列化JSON字符串,以便可以使用C#轻松处理数据。 然后,我想将相同Javascript类型(相同的字段名称和所有内容)的对象数组发送回客户端。 我不明白的是如何序列化此类:
class MyObject{
public string Name;
public int ID;
}
因此JSON与上述javascript对象相同。 以及如何反序列化到C# MyObject
类中。
我如何轻松做到这一点? 我正在使用Netwonsoft.Json。
有什么方法可以将JSON字符串转换为对象的列表或数组?
通过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);
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));
}
您可以尝试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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.