我正在平板电脑和 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;
关于c# - 未发送每个名称/值对时在 c# 中解析 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813341/