c# - 如何检查 Json 是否匹配特定的 C# 类型?

标签 c# json serialization

我的 Asp.Net MVC 应用程序操作通过序列化多个 C# 对象之一返回 JSON,具体取决于具体情况(如果发生错误,如果检索到一种数据类型,则返回一种数据类型,等等)。

当我尝试在 C# Windows 服务中使用 JSON 时,我无法确定返回的 JSON 类型。不幸的是,据我所见,如果没有 JSON 匹配,JSON 序列化器(JSON.Net 和任何 RestSharp 使用的)都可以毫无问题地创建一个空对象。

我理解为什么会发生这种情况,但我对如何确定从 JSON 序列化的值是否合法,或者是否没有匹配的 JSON 属性以及序列化程序只是创建了一个空对象感到困惑。

有谁知道我如何确定 JSON 和我尝试反序列化的类型之间是否存在匹配?

最佳答案

我不太清楚如何在 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 文本中的适当属性进行填充。

重要的三件事:

  • 如果您尝试反序列化不包含 Event 类中的属性的 JSON 文本,它将抛出异常。
  • 如果 JSON 包含这些属性,但不包含值,它将通过反序列化。
  • 如果 JSON 文本包含与 Event 类相同的属性但还包含其他属性,它仍将通过反序列化。

示例代码如下:

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)
{

}

关于c# - 如何检查 Json 是否匹配特定的 C# 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7614564/

相关文章:

java - 使用 GSON 获取嵌套 JSON 对象 : Deserialization

delphi - TPopupMenu 作为子组件,序列化 TMenuItems

java - Jackson 将对象序列化为字符串

c# - 从 Application_Error 重定向页面时出错

android - C++ 方法返回任何数据类型。

Javascript 循环通过 JSON 对象数组

javascript - ng-选择 AngularJS

c# - MongoDB 聚合函数到 C#

c# - 如何使用 Entity Framework 6 更新记录?

c# - EntityFramework 的验证框架