簡體   English   中英

如何對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM