C#読み書きJson
8855 ワード
C#jsonファイルの処理には主に2つの方法があります.
(1)JavaScriptSerializerクラスを使用するには、System.Web.Extensionライブラリを導入し、次の2つの参照を追加する必要があります.
using System.Web; using System.Web.Script.Serialization;
主なコードは次のとおりです.
(2)DataContractJsonSerializerクラスを使用するには、System.Runtime.Serializationライブラリを導入し、次の参照を加える必要があります.
using System.Runtime.Serialization; using System.Runtime.Serialization.Json;
サンプルコードは次のとおりです.
(1)JavaScriptSerializerクラスを使用するには、System.Web.Extensionライブラリを導入し、次の2つの参照を追加する必要があります.
using System.Web; using System.Web.Script.Serialization;
主なコードは次のとおりです.
public class Data
{
public int Id { get; set; }
// [ScriptIgnore]
public string Name { get; set; }
public string GetName()
{
return Id.ToString() + Name;
}
}
public class JsonPaserWeb
{
// Object->Json
public string Serialize(Data obj)
{
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
string json = jsonSerializer.Serialize(obj);
return json;
}
// Json->Object
public Data Deserialize(string json)
{
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
//
Data obj = jsonSerializer.Deserialize<Data>(json);
return obj;
}
}
[ScriptIgnore]タグを使用すると、変数がシーケンス化に参加しないようにできます.(2)DataContractJsonSerializerクラスを使用するには、System.Runtime.Serializationライブラリを導入し、次の参照を加える必要があります.
using System.Runtime.Serialization; using System.Runtime.Serialization.Json;
サンプルコードは次のとおりです.
[DataContract]
public class Data
{
[DataMember(Name = "id", Order = 0)]
public int Id;
[DataMember(Name = "name", Order = 1)]
public string Name;
[DataMember(Name = "child", Order = 2)]
public Child child = new Child();
[DataMember(Name = "list", Order = 3)]
public List<int> Ids = new List<int>();
[DataMember(Name = "dictionary", Order = 4)]
public Dictionary<int, Child> dic = new Dictionary<int, Child>();
[IgnoreDataMember]
public string Description = "This is a json data class";
}
public class Child
{
public float Age;
public string FullName;
}
class JsonParserRuntime
{
// Object->Json
public string Serialize(Data obj)
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
string json = "";
using (MemoryStream stream = new MemoryStream())
{
jsonSerializer.WriteObject(stream, obj);
json = Encoding.UTF8.GetString(stream.ToArray());
}
return json;
}
// Json->Object
public Data Deserialize(string json)
{
Data obj = null;
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Data));
obj = (Data)jsonSerializer.ReadObject(ms);
}
return obj;
}
}
[DataContract]タグを使用するクラスでは、[DataMember(Name="id",Order=0)]タグを同時に使用して変数を処理したり、[IgnoreDataMember]タグを使用して変数をシーケンス化しないようにしたりできます.