我有一个名为 ShipFromAddress
的具体类以及我在下面以这种方式反序列化我的 json 的地方
JavaScriptSerializer jss = new JavaScriptSerializer();
oShipFromAddress = jss.Deserialize<ShipFromAddress>(Request.Cookies["ShipFromAddress"].Value);
具体类
public class ShipFromAddress
{
public string Weight
{
get;
set;
}
public string addressLine1
{
get;
set;
}
public string addressLine2
{
get;
set;
}
public string city
{
get;
set;
}
public string postcode
{
get;
set;
}
public string countrycode
{
get;
set;
}
public string StateCode
{
get;
set;
}
}
我不想创建或使用具体类,而是想借助动态对象或匿名类概念即时进行反序列化。请指导我使用示例代码。
我有两个解决方案......看起来不错
1) 当需要将多个数据序列化为匿名时,示例如下
var query = from employee in employees select new { Name = employee.Name, Id = employee.Id };
LogEmployees(query);
public void LogEmployees (IEnumerable<dynamic> list)
{
foreach (dynamic item in list)
{
string name = item.Name;
int id = item.Id;
}
}
方法参数类型必须是IEnumerable<dynamic> because LogEmployees()
需要多个数据的函数
2) 传递单个数据时代码看起来像
public class Program
{
private static void Thing(dynamic other)
{
Console.WriteLine(other.TheThing);
}
private static void Main()
{
var things = new { TheThing = "Worked!" };
Thing(things);
}
}
最佳答案
借助 JavaScriptSerializer,您可以使用 DeserializeObject
来自序列化器的方法,它将只返回一个对象:
JavaScriptSerializer jss = new JavaScriptSerializer();
object obj= jss.DeserializeObject(Request.Cookies["ShipFromAddress"].Value);
在内部它将表示为 Dictionary<string, object>
, 所以你可以把它投给它并像这样使用:
var values = (Dictionary<string, object>)jss.DeserializeObject(Request.Cookies["ShipFromAddress"].Value);
var addressLine1 = values["addressLine1"].ToString();
或者您可以将其转换为 dynamic
:
dynamic values = jss.DeserializeObject(Request.Cookies["ShipFromAddress"].Value);
var addressLine1 = values["addressLine1"].ToString();
或者,您可以使用Json.NET
图书馆,它是JsonConvert
类(基准测试表明它比 JavaScriptSerializer
执行得更快)。代码将如下所示:
dynamic values = JsonConvert.DeserializeObject(Request.Cookies["ShipFromAddress"].Value);
var addressLine1 = values.addressLine1;
关于c# - 将 json 反序列化为动态/匿名类 asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027229/