20

JSON.NET を使用して、C# オブジェクト クラスから JSON スキーマを生成しています。しかし、maxLength、パターン (電子メールを検証するための正規表現) などの他の json スキーマ属性を追加できませんでした。

以下は私の作業コードです。必要な属性を持つjsonスキーマのみを生成できます。json スキーマにこれらの追加の属性を追加する方法について、誰かがコード例を投稿できれば素晴らしいことです。

ありがとう、

私のコード例

public class Customer
{
    [JsonProperty(Required = Required.Always)]
    public int CustomerID { get; set; }

    [JsonProperty(Required = Required.Always)]
    public string FirstName { get; set; }

    [JsonProperty(Required = Required.Always)]
    public string LastName { get; set; }

    [JsonProperty(Required = Required.Always)]
    public string Email { get; set; }

    [JsonProperty(Required = Required.AllowNull)]
    public string Phone { get; set; }
}

{
    "title" : "Customer",
    "type" : "object",
    "properties" : {
        "CustomerID" : {
            "required" : true,
            "type" : "integer"
        },
        "FirstName" : {
            "required" : true,
            "type" : "string"
        },
        "LastName" : {
            "required" : true,
            "type" : "string"
        },
        "Email" : {
            "required" : true,
            "type" : "string"
        },
        "Phone" : {
            "required" : true,
            "type" : [
                "string",
                "null"
            ]
        }
    }
}
4

5 に答える 5

12

Json.NET スキーマでは、スキーマ生成のサポートが大幅に改善されました。

プロパティに .NET の Data Annotation 属性で注釈を付けて、スキーマの最小値、最大値、minLength、maxLength などの情報を指定できます。

型のスキーマを生成するときに完全に制御できる JSchemaGenerationProvider もあります。

詳細はこちら: http://www.newtonsoft.com/jsonschema/help/html/GeneratingSchemas.htm

于 2015-01-28T03:38:42.647 に答える
0

このようなカスタム JsonConverter を作成できます。リフレクションを使用してプロパティを入力しました。

  public class UserConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var user = (User)value;
        var result = new StringBuilder("{");

        result.Append("title : " + user.GetType().Name + ", ");
        result.Append("properties : {");

        foreach (var prop in user.GetType().GetProperties())
        {
            result.Append(prop.Name + ": {");
            result.Append("value : " + Convert.ToString(prop.GetValue(user, null)) + ", ");

            var attribute = (JsonPropertyAttribute)Attribute.GetCustomAttributes(prop)[0];
            if (attribute.Required == Required.Always)
                result.Append("required : true, ");

            result.Append("type : " + prop.PropertyType.Name.ToLower());
            result.Append(" }");
        }
        writer.WriteValue(result.ToString());
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var user = new User { UserName = (string)reader.Value };

        return user;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(User);
    }

}

[JsonConverter(typeof(UserConverter))]
public class User
{
    [JsonProperty(Required = Required.Always)]
    public string UserName { get; set; }
}

//Run  
string json = JsonConvert.SerializeObject(manager, Formatting.Indented);

Console.WriteLine(json);
于 2013-06-27T21:53:43.513 に答える
-4
  • 最初にjsonファイルをxmlに変換します
  • 追加したいxmlノードを追加して、xmlをjsonに変換します。

この変換は「newtonsoft.json.jsonconvert」クラスで簡単に行うことができます。このクラスを使用するには、プロジェクトに newtonsoft.json dll をインポートするだけです。

于 2013-08-08T13:27:50.503 に答える