我的Asp.Net MVC应用程序操作是通过序列化几个C#对象中的一个来返回JSON,具体取决于具体情况(如果发生错误,如果检索到一种类型的数据,则为一种数据类型等)。
当我尝试在C#windows服务中使用JSON时,我无法确定要返回的JSON类型。不幸的是,从我所看到的,如果没有JSON匹配,JSON序列化器(JSON.Net和RestSharp使用的任何东西)都可以创建一个空对象。
我理解为什么会发生这种情况,但我很困惑如何判断从JSON序列化的值是否合法,或者是否所有JSON属性都匹配且序列化程序只是创建了一个空对象。
有谁知道如何确定JSON与我尝试反序列化的类型之间是否存在匹配?
答案 0 :(得分:0)
我建议使用try和catch块,如果你的反序列化会抛出无效的参数异常,那么字符串格式不正确。 如果您使用的是System.Web.Script.Serialization
JavaScriptSerializer sel = new JavaScriptSerializer();
try
{
return sel.Deserialize<List<YourObjectType>>(jSONString);
}
catch(System.ArgumentException e)
{
return null;
}
答案 1 :(得分:0)
我不确切知道如何在JSON和C#类型之间进行匹配。但是如果你想检查JSON中匹配适当值的所有属性你可以做Json Serialization Sttributes:
这里我有C#类型:
[JsonObject(ItemRequired = Required.Always)]
public class Event
{
public string DataSource { get; set; }
public string LoadId { get; set; }
public string LoadName { get; set; }
public string MonitorId { get; set; }
public string MonitorName { get; set; }
public DateTimeOffset Time { get; set; }
public decimal Value { get; set; }
}
我使用属性[JsonObject(ItemRequired = Required.Always)]
修饰了该类型,该属性要求所有属性都使用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)
{
}