为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证 JObject 是否属于特定类型

如何验证 JObject 是否属于特定类型

C#
胡说叔叔 2023-08-20 11:08:30
我需要弄清楚 JObject 是否具有与 CustomObject 类型匹配的正确属性。我使用 JObject.ToObject 希望如果属性与 CustomObject 不匹配它会失败,但它仍然创建所有属性为 null 的 CustomObject。无论如何,我可以在调用 ToObject 之前验证它吗?class CustomObject{  string fname;  string lname;}void test(){  string json = "{\"User\": \"Hello\"}";  JObject jsonObj = JObject.Parse(json);  CustomObject custObj = null;  // this always creates CustomObject instance  // I need to validate that jsonObj has valid attributes that match CustomObject  custObj = JObject.ToObject<CustomObject>(); 
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

编辑:您可以使用[JsonRequiredAttribute]:


class CustomObject

{

    [JsonRequiredAttribute]

    string fname;

    [JsonRequiredAttribute]

    string lname;

}

或者,您可以使用Newtonsoft.Json.Schema来验证:


var schema = JSchema.Parse(@"{ 

    'type': 'object',

    'properties': {

        'fname': { 'type': 'string' },

        'lname': { 'type': 'string' }

    },

    'additionalProperties': false,

    'required': ['name', 'email']

}");

var jsonObj = JObject.Parse("{\"User\": \"Hello\"}");


// throws if not valid

jsonObj.Validate(schema);


// or, if you want to handle it yourself

if (!jsonObj.IsValid(schema, out IList<ValidationError> errors))

{

    // ...

}


// if all pass

var custObj = jsonObj.ToObject<CustomObject>();


查看完整回答
反对 回复 2023-08-20
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

public class CustomObject

{

    [JsonProperty("FirstName")]

    string fname { get; set; }


    [JsonProperty("LastName")]

    string lname { get; set; }

}

public void Test()

    {

        Dictionary<string, string> collection = new Dictionary<string, string>();

        collection.Add("FirstName", "Test");

        collection.Add("LastName", "1234");

        JObject jsobObj = JObject.Parse(JsonConvert.SerializeObject(collection, Newtonsoft.Json.Formatting.Indented));


        CustomObject custObj = new CustomObject();


        if (jsobObj != null)

        {

            if (jsobObj.Property("FirstName") != null && jsobObj.Property("LastName") != null)

            {

                custObj = jsobObj.ToObject<CustomObject>();

            }

        }


    }


查看完整回答
反对 回复 2023-08-20
?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以使用.SelectToken()它从具有多个不同对象的较大 json 中获取特定对象。

对于您的具体示例,它看起来像这样。

custObj = (CustomObject)jsonObj.SelectToken("CustomObject");

您要将所选标记转换为CustomObject,然后将其分配给您的custObj变量。

查看完整回答
反对 回复 2023-08-20
  • 3 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信