C#:dynamic、匿名对象、序列化

72 阅读1分钟

JToken

zhuanlan.zhihu.com/p/388545891

匿名对象的序列化

//序列化
Payload = JsonConvert.SerializeObject(
    new
    {
        JobNo = jobNo
    }
);

//反序列化
dynamic routePayload = JsonConvert.DeserializeObject(route.Payload);
//坑:routePayload.JobNo并不是string,是JToken类型!反序列化时需谨慎
var jobNo = routePayload.JobNo.Value;

序列化配置

var serializerSettings = new JsonSerializerSettings
{
    //设置为驼峰命名,首字母小写
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var payload = JsonConvert.SerializeObject(heatEventPayload, Formatting.None, serializerSettings);

动态创建对象属性

dynamic obj2 = new System.Dynamic.ExpandoObject();
obj2.Name = "金朝钱";
obj2.Age = 31;
obj2.Birthday = DateTime.Now;

给json串增加属性

//方法一:使用dynamic、ExpandoObject
dynamic originalPayload = JsonConvert.DeserializeObject<ExpandoObject>(heatEvent.Payload);
//空值赋值运算符
originalPayload ??= new ExpandoObject();
originalPayload.stirring = eventData.Items;

//方法二:使用jsonObject
var jsonObject = JsonNode.Parse(heatEvent.Payload)?.AsObject();
jsonObject["stirring"] = JsonNode.Parse(JsonConvert.SerializeObject(eventData.Items));
heatEvent.Payload = jsonObject.ToJsonString();