我遇到了一个关于将结构序列化为JSON的问题。因此,我有一个结构“Coordinates”
namespace CoordinatesNameSpace
{
public struct Coordinates
{
public Coordinates(string key, string x, string y, string z)
{
this.key = key;
this.x = x;
this.y = y;
this.z = z;
}
public string key;
public string x;
public string y;
public string z;
public override string ToString()
{
return $"{key} {this.x} {this.y} {this.z}";
}
}
}
所有的属性都是公共的,所以我期望JSON序列化器会返回给我{“key”:“v”,“x”:“0. 12331212”...},但它只返回一个空对象。
using CoordinatesNameSpace;
namespace ObjToJSON
{
class Program
{
static void Main(string[] args)
{
List<Coordinates> parsedCoordinatesList = new List<Coordinates>();
Coordinates _c;
_c.key = splitted[0]; // "v"
_c.x = splitted[1]; // "1.324394"
_c.y = splitted[2]; // "-0.219625"
_c.z = splitted[3]; // "-0.422554"
parsedCoordinatesList.Add(_c);
// returns an [{}, {}, {} ...]
//string json = JsonSerializer.Serialize<List<Coordinates>>(parsedCoordinatesList);
// returns {}
string json = JsonSerializer.Serialize<Coordinates>(parsedCoordinatesList[0]);
有人能给我解释一下吗--为什么会这样,如何正确地序列化?
2条答案
按热度按时间bcs8qyzn1#
它seems目前
System.Text.Json
不支持序列化字段,将字段更改为属性,一切都应该正常:也来自文档:
序列化行为:
...
由于. NET 5字段可以通过
JsonSerializerOptions.IncludeFields
全局设置或通过JsonIncludeAttribute
包含。bihw5rsg2#
JsonSerializer是微软最近推出的一个相当新的库,它确实缺少一些特性,如字段序列化。
一种选择是将字段转换为属性,这是一个很好的建议,因为使用公共字段并不是一个好的设计实践,因为这会暴露对象的内部状态。但是,如果这是无法避免的,那么就选择一个复杂的JsonSerializer,如Newtonsoft.Json,它可以作为Nuget包提供。
Newtonsoft.Json
它可以按如下方式使用: