如何在c#中从json模式创建默认的json对象

时间:2016-03-09 19:59:35

标签: c# json json.net jsonschema json-schema-defaults

我无法在json.net api reference或任何地方谷歌那件事。 我想从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模式创建具有默认值的对象。

1 个答案:

答案 0 :(得分: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
}