代码拉取完成,页面将自动刷新
[TOC]
自用扩展,交流群:438789123 ,51492982
使用前请导入空间名
c# using NearExtensions;
vb Imports NearExtensions
Core3.0 下默认使用
System.Text.Json
其他框架需Nuget : Newtonsoft.Json
参数 | 说明 |
---|---|
isIgnoreNull | 是否忽略空值,默认启用 |
isIndented | 是否保留缩进格式,默认关闭 |
isInterface | 用于序列化接口,默认关闭 |
dateFormatString | 日期默认格式,默认为空,可设置为 yyyy-MM-dd HH:mm:ss |
将对象序列化成JSON字符串。
//c# 实体类
class Test1
{
public string Name { get; set; }
public DateTime DateTime { get; set; }
}
'vb 实体类
Public Class Test1
Property Name As String
Property DateTime As Date
End Class
c#
//引入空间名
using NearExtensions;
//准备数据
var obj = new Test1()
{
DateTime = DateTime.MaxValue
};
//序列化成JSON字符串
var json = obj.SerializerJson();
vb
'引入空间名
Imports NearExtensions
'准备数据
Dim obj = New Test1() With
{
.DateTime = Date.MaxValue
}
'序列化成JSON字符串
dim json = obj.SerializerJson()
输出
{"DateTime":"9999-12-31T23:59:59.9999999"}
//c#
var json = obj.SerializerJson(isIgnoreNull: false,isIndented:true);
'vb
Dim json = obj.SerializerJson(isIgnoreNull:=False, isIndented:=True)
输出
{
"Name": null,
"DateTime": "9999-12-31T23:59:59.9999999"
}
//c#
var json = obj.SerializerJson(dateFormatString: "yyyy-MM-dd");
'vb
Dim json = obj.SerializerJson(dateFormatString:="yyyy-MM-dd")
输出
{"DateTime":"9999-12-31"}
将字符串反序列化成对象
//c#
var json = "{\"DateTime\":\"9999-12-31T23:59:59.9999999\"}";
var test1 = json.DeserializeJson<Test1>();
'vb
Dim json As String = <s>{"DateTime":"9999-12-31T23:59:59.9999999"}</s>
dim test1 = json.DeserializeJson(of Test1)()
如果成员为接口类型,请使用DeserializeOptions.AddTypeConvert()
方法添加类型转换。
//c# 实体类
interface IItem
{
string Name { get; set; }
}
class Item : IItem
{
public string Name { get; set; }
}
class Test2
{
public IList<IItem> Items { get; set; }
}
//调用
var test2 = new Test2()
{
Items = new List<IItem>()
{
new Item(){ Name = "A" },
new Item(){ Name = "B" },
}
};
//获得JSON
var json = test2.SerializerJson();
//使用DeserializeOptions添加类型转换
var deserializeOptions = new DeserializeOptions()
.AddTypeConvert<IList<IItem>, List<Item>>();
//反序列化成对象
var obj = json.DeserializeJson<Test2>(deserializeOptions);
//验证结果
Debug.Assert(obj.Items.First().Name == test2.Items.First().Name);
'vb 实体类
Interface IItem
Property Name As String
End Interface
Class Item
Implements IItem
Public Property Name As String Implements IItem.Name
End Class
Class Test2
Property Items As IList(Of IItem)
End Class
'调用
Dim test2 = New Test2 With
{
.Items = New List(Of IItem) From
{
New Item With {.Name = "A"},
New Item With {.Name = "B"}
}
}
'获得JSON文本
Dim json = test2.SerializerJson()
'使用DeserializeOptions添加类型转换
Dim deserializeOptions = New DeserializeOptions().
AddTypeConvert(Of IList(Of IItem), List(Of Item))
'反序列化成对象
Dim obj = json.DeserializeJson(Of Test2)(deserializeOptions)
'验证结果
Debug.Assert(obj.Items.First().Name = test2.Items.First().Name)
默认情况下 .Net Core 3 使用 System.Text.Json
序列化,调用JsonHelper.SetNewtonsoftJsonProvider()
方法后切换到Newtonsoft.Json
//c#
var test1 = new Test1() { Name = "A" };
//序列化
var xml = test1.SerializerXml();
//反序列化
var obj = xml.DeserializeXml<Test1>();
//验证结果
Debug.Assert(obj.Name == test1.Name);
'vb
Dim test1 = New Test1() With {.Name = "A"}
'序列化
Dim xml = test1.SerializerXml()
'反序列化
Dim obj = xml.DeserializeXml(Of Test1)
'验证结果
Debug.Assert(obj.Name = test1.Name)
缓存ConvertOptions可以提高性能, 使用AutoMapper性能会更好.
//c# 实体类
class ClassA
{
public string Name { get; set; }
}
class ClassB
{
public string Name { get; set; }
}
//---调用
var data = new ClassA() { Name = "A" };
//执行转换(ClassA 转换为 ClassB)
var obj = data.ToObject<ClassB>();
//验证结果
Debug.Assert(obj is ClassB);
Debug.Assert(obj.Name == data.Name);
'vb 实体类
Class ClassA
Property Name As String
End Class
Class ClassB
Property Name As String
End Class
'---调用
Dim data = New ClassA With {.Name = "A"}
'执行转换(ClassA 转换为 ClassB)
Dim obj = data.ToObject(Of ClassB)
'验证结果
Debug.Assert(TypeOf obj Is ClassB)
Debug.Assert(obj.Name = data.Name)
c#
//类定义
interface IItem
{
string Name { get; set; }
}
class Item : IItem
{
public string Name { get; set; }
}
class ClassC
{
public IItem Item { get; set; }
}
class ClassD
{
public Item Item { get; set; }
}
//---调用
//准备数据
var data = new ClassC()
{
Item = new Item { Name = "A" }
};
//转换选项(添加类型)
//AddTypeConvert 方法用于类型映射,如果不能直接转换可使用委托转换.
//AddTypeConvert<IItem, Item>(x => x as Item);
var convertOptions = new ConvertOptions()
.AddTypeConvert<IItem, Item>();
//转换成ClassD类型
var obj = data.ToObject<ClassD>(convertOptions);
//验证结果
Debug.Assert(obj.Item.Name == data.Item.Name);
vb
'实体类
Interface IItem
Property Name As String
End Interface
Class Item
Implements IItem
Public Property Name As String Implements IItem.Name
End Class
Class ClassC
Property Item As IItem
End Class
Class ClassD
Property Item As Item
End Class
'---调用
'准备数据
Dim data = New ClassC With
{
.Item = New Item With {.Name = "A"}
}
'转换选项(添加类型)
'AddTypeConvert 方法用于类型映射,如果不能直接转换可使用委托转换.
'AddTypeConvert(Of IItem, Item)(Function(x) => x as Item)
Dim convertOptions = New ConvertOptions().
AddTypeConvert(Of IItem, Item)
'转换成ClassD类型
Dim obj = data.ToObject(Of ClassD)(convertOptions)
'验证结果
Debug.Assert(obj.Item.Name = data.Item.Name)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。