在使用WebAPI将其返回给客户端之前,我经常需要使用附加信息来扩展我的域模型.为了避免创建ViewModel,我认为可以返回带有附加属性的JObject.但是,通过对Newtonsoft JSON库的一次调用,我找不到将任何类型的对象转换为JObject的直接方法.我想出了这样的 idea :

  1. 第一个序列化对象
  2. 然后解析
  3. 并扩展JObject

例如:

var cycles = cycleSource.AllCycles();

var settings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

var vm = new JArray();

foreach (var cycle in cycles)
{
    var cycleJson = JObject.Parse(JsonConvert.SerializeObject(cycle, settings));
    // extend cycleJson ......
    vm.Add(cycleJson);
}

return vm;

我走这条路对吗?

推荐答案

JObject实现了IDictionary,因此可以这样使用它.前男友,

var cycleJson  = JObject.Parse(@"{""name"":""john""}");

//add surname
cycleJson["surname"] = "doe";

//add a complex object
cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" });

因此,最终的json将是

{
  "name": "john",
  "surname": "doe",
  "complexObj": {
    "id": 1,
    "name": "test"
  }
}

你也可以使用dynamic关键字

dynamic cycleJson  = JObject.Parse(@"{""name"":""john""}");
cycleJson.surname = "doe";
cycleJson.complexObj = JObject.FromObject(new { id = 1, name = "test" });

.net相关问答推荐

删除数据库项目中的表

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

.NET Async / Await:状态机如何知道何时继续执行?

如何在选项卡中 Select Winforms NumericUpDown 中的所有文本?

如何确定计时器是否正在运行?

如何创建 LINQ to SQL 事务?

在 C# 中将字符串转换为 colored颜色

为什么我得到 411 Length required 错误?

String 是原始类型吗?

如何正确停止BackgroundWorker

在 ToString() 之前判断 null

如何使用 Android 使用 WCF 服务

从 .NET 中的字符串末尾修剪字符串 - 为什么会丢失?

ILookup 接口与 IDictionary

析构函数、dispose 和 finalize 方法的区别

C# (.NET) 设计缺陷

DataContractSerializer vs XmlSerializer:每个序列化器的优缺点

MemoryCache 不遵守配置中的内存限制

C# - 在 WPF 应用程序中保存用户设置的方法?

判断数据表中是否包含空值的最佳方法