概述
NewtonSoft.Json 兼容问题,简单一句话就是你必须引用 Revit 安装目录下面的 NewtonSoft.Json.dll,否则你在使用它的功能的时候可能出现各种问题,原因就是版本冲突。问题很简单,如果不知道,调试可能会花你很多时间。
NewtonSoft.Json 自定义类序列化 null 问题
这个是官方的例子:
Product product = new Product();
product.Name = "Apple";
product.ExpiryDate = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string output = JsonConvert.SerializeObject(product);
//{
// "Name": "Apple",
// "ExpiryDate": "2008-12-28T00:00:00",
// "Price": 3.99,
// "Sizes": [
// "Small",
// "Medium",
// "Large"
// ]
//}
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);
如果去掉对 product 所有属性的赋值:
Product product = new Product();
string output = JsonConvert.SerializeObject(product);
//{
// "Name": null,
// "ExpiryDate": "0001-01-01T00:00:00",
// "Price": 0.0,
// "Sizes": null
//}
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);
如果把 product
作为 类型为 ManyProducts
的 products
的成员:
ManyProducts products = new ManyProducts();
string output = JsonConvert.SerializeObject(products);
//{
// "P1": null,
// "P2": null
//}
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);
结论就是做序列化的时候,自己要控制好每一个属性的值。
C#函数默认值
搜了一圈,说 C# 函数不支持默认值,不知道从哪个版本已经开始支持了。
public void PrintAbout(string str = "helloworld")
{
TaskDialog.Show(str, str);
}