常用库的使用net
using Newtonsoft.Json;
public class MyClass
{
// 这个属性在序列化时会被忽略
[JsonIgnore]
public string HiddenProperty { get; set; }
// 这个属性正常序列化
public string VisibleProperty { get; set; }
// 如果需要在反序列化时设置 HiddenProperty 的值,
// 可以通过一个私有属性来接收 JSON 中的值
[JsonProperty("HiddenProperty")]
private string HiddenPropertyForDeserialization
{
set => HiddenProperty = value;
}
}
// 示例用法
var obj = new MyClass
{
HiddenProperty = "This will be ignored during serialization",
VisibleProperty = "This will be serialized"
};
// 序列化
string json = JsonConvert.SerializeObject(obj);
Console.WriteLine("Serialized JSON: " + json); // 输出: {"VisibleProperty":"This will be serialized"}
// 反序列化
var deserializedObj = JsonConvert.DeserializeObject<MyClass>("{\"HiddenProperty\":\"This will be deserialized\",\"VisibleProperty\":\"Another value\"}");
Console.WriteLine("HiddenProperty: " + deserializedObj.HiddenProperty); // 输出: This will be deserialized
Console.WriteLine("VisibleProperty: " + deserializedObj.VisibleProperty); // 输出: Another value
bogus
[Fact]
public async Task BatchAddStaffAsync_WhenCalled_ShouldAddStaffToDatabase()
{
// Arrange
var staffs = new Faker<Staff>()
.RuleFor(u => u.Name, f => f.Person.FullName)
.RuleFor(u => u.Email, f => f.Person.Email)
.RuleFor(u => u.Age, f => f.Random.Number(18, 60))
.RuleFor(u => u.Addresses, f => f.MakeLazy(f.Random.Number(1, 3), () => f.Address.FullAddress()))
.RuleFor(u => u.Created, f => f.Date.PastOffset())
.Generate(500);
// Act
await _staffRepository.BatchAddStaffAsync(staffs, CancellationToken.None);
// Assert
var retrievedStaffs = await _staffRepository.GetAllStaffAsync(CancellationToken.None);
Assert.NotNull(retrievedStaffs); // 确保 Staff 已成功添加到数据库
Assert.Equal(500, retrievedStaffs.Count); // 确保正确数量的 Staff 已添加到数据库
Assert.True(staffs.All(x => retrievedStaffs.Any(_ => x.Id == _.Id)));
}
extended.wpf.toolkit
var pg=new propertygrid()
pg.selectedobject=employee
侧边栏
[Browsable(False)]
隐藏类的某些属性
[Category("Name")]
分类 侧边栏分类一样的
有表单提交功能
✅ 优先使用属性:
-
需要控制访问权限(如只读
{ get; }
)。 -
需要数据验证(如
set
里检查value
是否合法)。 -
需要计算值(如
FullName
由FirstName + LastName
组成)。 -
需要兼容数据绑定(如 WPF、ASP.NET MVC)。
❌ 可以使用字段:
-
仅限类内部使用(
private
字段)。 -
性能敏感场景(属性有轻微开销,但通常可忽略)。