C# 如何检查Json是否与特定的C类型匹配?
我的Asp.Net MVC应用程序操作是通过序列化几个C#对象中的一个来返回JSON,具体取决于环境(如果发生错误,如果检索到一种数据类型,则返回一种数据类型,等等) 当我试图在C#windows服务中使用JSON时,我很难确定返回的JSON类型。不幸的是,从我所看到的情况来看,如果JSON不匹配,JSON序列化程序(JSON.Net和RestSharp使用的任何东西)在创建空对象时都没有问题 我理解为什么会发生这种情况,但我不知道如何确定从JSON序列化的值是否合法,或者JSON属性是否匹配,序列化程序是否只是创建了一个空对象C# 如何检查Json是否与特定的C类型匹配?,c#,json,serialization,C#,Json,Serialization,我的Asp.Net MVC应用程序操作是通过序列化几个C#对象中的一个来返回JSON,具体取决于环境(如果发生错误,如果检索到一种数据类型,则返回一种数据类型,等等) 当我试图在C#windows服务中使用JSON时,我很难确定返回的JSON类型。不幸的是,从我所看到的情况来看,如果JSON不匹配,JSON序列化程序(JSON.Net和RestSharp使用的任何东西)在创建空对象时都没有问题 我理解为什么会发生这种情况,但我不知道如何确定从JSON序列化的值是否合法,或者JSON属性是否匹配,
有人知道我如何确定JSON和我试图反序列化的类型之间是否存在匹配吗?我建议使用try-and-catch块,如果反序列化将引发无效参数异常,则字符串的格式不正确。 如果您使用的是System.Web.Script.Serialization
JavaScriptSerializer sel = new JavaScriptSerializer();
try
{
return sel.Deserialize<List<YourObjectType>>(jSONString);
}
catch(System.ArgumentException e)
{
return null;
}
JavaScriptSerializer sel=newJavaScriptSerializer();
尝试
{
返回sel.Deserialize(jSONString);
}
catch(System.e)
{
返回null;
}
我不知道如何准确匹配JSON和C类型。但如果您想检查JSON中的所有属性是否匹配适当的值,您可以执行JSON:
这里我有C型:
我用属性[JsonObject(ItemRequired=Required.Always)]
修饰了该类型,该属性要求使用JSON文本中的适当属性填充所有属性
有三件重要的事情:
- 若您尝试反序列化不包含事件类中的属性的JSON文本,它将引发异常李>
- 如果JSON包含这些属性,但不包含值,它将通过反序列化李>
- 若JSON文本包含与事件类相同的属性,但也包含其他属性,则它仍将通过反序列化
var message = @"{ 'DataSource':'SomeValue','LoadId':'100','LoadName':'TEST LOAD','MonitorId':'TEST MONITOR','MonitorName':'TEST MONITOR','Time':'2016-03-04T00:13:00','Value':0.0}";
try
{
var convertedObject = JsonConvert.DeserializeObject<Event>(message);
}
catch (Exception ex)
{
}
var message=@“{'DataSource':'SomeValue'、'LoadId':'100'、'LoadName':'TEST LOAD'、'MonitorId':'TEST MONITOR'、'MonitorName':'TEST MONITOR'、'Time':'2016-03-04T00:13:00'、'Value':0.0}”;
尝试
{
var convertedObject=JsonConvert.DeserializeObject(消息);
}
捕获(例外情况除外)
{
}
如果没有与泛型类型匹配的json属性,反序列化将不会抛出错误,而是只创建一个空的C#对象
var message = @"{ 'DataSource':'SomeValue','LoadId':'100','LoadName':'TEST LOAD','MonitorId':'TEST MONITOR','MonitorName':'TEST MONITOR','Time':'2016-03-04T00:13:00','Value':0.0}";
try
{
var convertedObject = JsonConvert.DeserializeObject<Event>(message);
}
catch (Exception ex)
{
}