在使用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相关问答推荐

从窗体中移除另一个控件中引用的控件时获取设计时通知

如何通过在后台预加载流项来优化流迭代的性能?

无法对.NET MAUI类库进行单元测试

如何手动注入依赖注入

为什么 ULong > 16 位的数学会变得不稳定?

无法使用 int.Parse 从字符串转换值

从 byte[] 创建 zip 文件

如何获取 Sql Server 数据库中所有模式的列表

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

具有透明背景且包含不透明控件的 WPF 窗口

NuGetPackageImportStamp 有什么用?

哪个更快:清除集合或实例化新的

双倍的? = 双倍? + 双倍?

软件包版本始终为 1.0.0,带有 dotnet pack

C#中的T是什么意思?

监听依赖属性的变化

为什么发布和调试模式下的代码行为不同?

SqlBulkCopy 的推荐批量大小是多少?

从字节数组中读取 C# 中的 C/C++ 数据 struct

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