c# - 未发送每个名称/值对时在 c# 中解析 json

标签 c# json

我正在平板电脑和 PC 之间实现客户端/服务器,我需要来回传递数据。在阅读了一些 json 之后,它看起来像是一个简单的、定义好的接口(interface)。我在我的项目中使用 Newtonsoft.Json。

我的理解是,除非在架构中按要求定义,否则每个名称/值对不必在每条消息中。如果这是真的,我将在反序列化后如何解析 json 对象以确定消息中发送的名称而苦苦挣扎。

例如,如果我正在发送天气数据并且可以发送看起来像这样的 json 数据

{  "isRaining": false,
   "isSnowing": false,
   "temp": 50.0
}

如果我总是发送这三个,那么我可以创建一个具有相同成员的类,并在反序列化时分配数据。

public class Weather
{
    public bool isRaining { get; set; }
    public bool isSnowing { get; set; }
    public float temp { get; set; }
}

Weather readWeather = JsonConvert.DeserializeObject<Weather>(data);

但我不想每次传输都发送所有数据。我真的只想知道是否发生了变化,然后如果温度上升,则只获取临时名称/值对,如果下雨或下雪没有改变,我不想获取该数据。

看起来至少以这种方式反序列化数据,我无法为每个循环执行一个循环以查看存在哪些名称。有什么办法吗?还是我一直都在发送所有数据?

我将在实际实现中发送更多数据,为了简单起见,我在这里只放了三对。

最佳答案

如果您使属性可为空,则发送它们是可选的

public class Weather
{        
    public bool? isRaining { get; set; }
    public bool? isSnowing { get; set; }
    public float? temp { get; set; }
}

现在这将很乐意接受这个 json:

{  
   "isSnowing": false,
   "temp": 50.0
}

您可以使用 HasValue 测试结果

var hasRainData = readWeather.isRaining.HasData;

实例:http://rextester.com/HCZG76360

关于c# - 未发送每个名称/值对时在 c# 中解析 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813341/

相关文章:

json.Unmarshal 返回空白结构

json - Django Cors 允许访问控制允许 header

c# - 在 C# 中保存数据结构

c# - 将自定义 .dll 类库添加到 asp.net/C# 网站

c# - 如何使用 MVC 6 解决 System.InvalidOperationException - 相同的模板

PHP 无法读取 AJAX 发送的数组

java - 为 optJSONArray 获取 null

javascript - Nancy 响应未返回 index.html 的正确 MIME 类型,包括

c# - 连接 HyperLinkField 单击到服务器端方法 (c#)

python 字符串列表转换为字典列表