Revit API 开发周边:NewtonSoft.Json 及兼容问题

概述

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 作为 类型为 ManyProductsproducts 的成员:

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);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值