3

我不能在json.net api 参考或任何地方搜索那个东西。我想从填充了默认值的 json 模式创建对象。基本上是这样的:

var JsonSchema=JsonSchema.ReadSchemaFromSomeWhere();
dynamic DefaultObject= JsonSchema.GetDefaultObject();

您可能在json-schema-defaults包中看到的示例。

例子

var JsonSchema=JsonSchema.ReadSchemaFromString("
{
  "title": "Album Options",
  "type": "object",
  "properties": {
    "sort": {
      "type": "string",
      "default": "id"
    },
    "per_page": {
      "default": 30,
      "type": "integer"
    }
  }");

dynamic DefaultObject= JsonSchema.GetDefaultObject();

//DefaultObject dump is
{
  sort: 'id',
  per_page: 30
}

更新

我希望 json.net 中的 lib 或 api 在运行时从任何给定的有效 json 模式创建具有默认值的对象。

4

1 回答 1

1

那么一个简单的案例可能是这样的

[Test]
public void Test()
{
   dynamic ob = new JsonObject();
   ob["test"] = 3;

   Assert.That(ob.test, Is.EqualTo(3));

}

我使用的RestSharp库提供了一个允许索引的良好动态实现["test"]

那么 - 你剩下要做的是从模式中读取属性并分配值(当然这仅适用于简单的普通情况,但可能是一个开始

dynamic ob = new JsonObject();
foreach (var prop in JsonSchema.Properties)
{

   if (prop.Default != null)
      ob[prop.Name] = prop.Default
}
于 2016-03-09T20:11:10.707 回答