我有这样的类:
class MyDate
{
int year, month, day;
}
class Lad
{
string firstName;
string lastName;
MyDate dateOfBirth;
}
我想把一个Lad对象变成一个JSON字符串,就像这样:
{
"firstName":"Markoff",
"lastName":"Chaney",
"dateOfBirth":
{
"year":"1901",
"month":"4",
"day":"30"
}
}
(没有格式)。我找到了这个链接,但是它使用的命名空间不在. net 4中。我还听说过JSON。NET,但是他们的网站似乎暂时宕机了,而且我不喜欢使用外部DLL文件。
除了手动创建JSON字符串写入器,还有其他选项吗?
请注意
微软建议不要使用JavaScriptSerializer
请参阅文档页的标题:
对于. net Framework 4.7.2及更高版本,使用System.Text.Json命名空间中的api进行序列化和反序列化。对于早期版本的. net Framework,请使用Newtonsoft.Json。
最初的回答:
你可以使用JavaScriptSerializer类(添加对System.Web.Extensions的引用):
using System.Web.Script.Serialization;
var json = new JavaScriptSerializer().Serialize(obj);
完整的例子:
using System;
using System.Web.Script.Serialization;
public class MyDate
{
public int year;
public int month;
public int day;
}
public class Lad
{
public string firstName;
public string lastName;
public MyDate dateOfBirth;
}
class Program
{
static void Main()
{
var obj = new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
var json = new JavaScriptSerializer().Serialize(obj);
Console.WriteLine(json);
}
}
使用Json。Net库,你可以从Nuget包管理器下载。
序列化为Json字符串:
var obj = new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
反序列化到Object:
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString );
下面是另一个使用Cinchoo ETL的解决方案——一个开源库
public class MyDate
{
public int year { get; set; }
public int month { get; set; }
public int day { get; set; }
}
public class Lad
{
public string firstName { get; set; }
public string lastName { get; set; }
public MyDate dateOfBirth { get; set; }
}
static void ToJsonString()
{
var obj = new Lad
{
firstName = "Tom",
lastName = "Smith",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
var json = ChoJSONWriter.Serialize<Lad>(obj);
Console.WriteLine(json);
}
输出:
{
"firstName": "Tom",
"lastName": "Smith",
"dateOfBirth": {
"year": 1901,
"month": 4,
"day": 30
}
}
声明:我是这个库的作者。
请注意
微软建议不要使用JavaScriptSerializer
请参阅文档页的标题:
对于. net Framework 4.7.2及更高版本,使用System.Text.Json命名空间中的api进行序列化和反序列化。对于早期版本的. net Framework,请使用Newtonsoft.Json。
最初的回答:
你可以使用JavaScriptSerializer类(添加对System.Web.Extensions的引用):
using System.Web.Script.Serialization;
var json = new JavaScriptSerializer().Serialize(obj);
完整的例子:
using System;
using System.Web.Script.Serialization;
public class MyDate
{
public int year;
public int month;
public int day;
}
public class Lad
{
public string firstName;
public string lastName;
public MyDate dateOfBirth;
}
class Program
{
static void Main()
{
var obj = new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
var json = new JavaScriptSerializer().Serialize(obj);
Console.WriteLine(json);
}
}