C# JsonSerializer.Serialize 返回一个空对象

2023-12-28

我遇到了有关将结构序列化为 JSON 的问题。所以,我有一个结构“坐标”

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]);

有人可以向我解释一下 - 为什么这样做以及如何使其正确序列化吗?


It seems https://github.com/dotnet/runtime/issues/876目前System.Text.Json不支持序列化字段。将字段更改为属性,一切都应该正常:

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  { get; set; }
    public string x  { get; set; }
    public string y  { get; set; }
    public string z  { get; set; }
    public override string ToString()
    {
        return $"{key} {this.x} {this.y} {this.z}";
    }
}

也来自docs https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/how-to?pivots=dotnet-core-3-1#deserialization-behavior:

序列化行为:

...

  • 目前,字段被排除。

UPD

Since 可以包含 .NET 5 字段 https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/how-to?pivots=dotnet-5-0#include-fields要么通过JsonSerializerOptions.IncludeFields全局设置或通过JsonIncludeAttribute.

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;
    }
    [JsonInclude]
    public string key;
    [JsonInclude]
    public string x;
    [JsonInclude]
    public string y;
    [JsonInclude]
    public string z;

    public override string ToString()
    {
        return $"{key} {this.x} {this.y} {this.z}";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# JsonSerializer.Serialize 返回一个空对象 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 按成员序列化

    我已经实现了template
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • PHP中有没有SMTP邮件传输库

    我想编写一个电子邮件传输服务 需要用 MTU 替换 sendmail postfix 我不是在寻找如何传递到发送 SMTP 服务器 如 SMTP 端口上的后缀列表 我也不需要服务器的接收部分 反弹等将转到不同的现有后缀 所有这些都是纯 PH
  • 如何从顶部栏/状态栏删除这种灰色

    我有一个应用程序 我将顶部栏 状态栏设置为上升颜色 它适用于棒棒糖上的大多数屏幕 但在其中一个屏幕上出现问题 这是一项活动 代码如下
  • 从 Jekyll 插件返回目录中的文件列表?

    我不知道如何在 jekyll 插件中创建过滤器或标签 以便我可以返回目录并循环其内容 我找到了这些 http pastebin com LRfMVN5Y http pastebin com LRfMVN5Y http snippets dz
  • Python 协议/接口的综合列表[重复]

    这个问题在这里已经有答案了 最近 我在看一些Python 习语 我发现了很多Python中使用的协议的描述 例如排序 cmp 或发电机 除此之外 还有类似的方法 hash 这是为每个对象定义的 我想 在互联网上进行一些搜索后 我还没有找到这
  • 从 UserControl 抽象子类继承

    我有一组用户控件需要具有一些类似的属性 因此 我定义了 UserControl 的一个抽象子类 它定义了这些属性并更新了 xaml cs 和 g cs 文件以从该基类继承 一切都编译良好并且运行良好 伟大的 但是 g cs 文件已生成并将重
  • 在 ASP.net 中返回纯文本或其他任意文件

    如果我要使用 PHP 中的纯文本响应 http 请求 我会执行以下操作 我如何在 ASP NET 中实现同等功能 如果你只想返回这样的纯文本 我会使用 ashx 文件 VS 中的通用处理程序 然后只需在 ProcessRequest 方法中
  • 将数据帧转换为没有列名的嵌套字典

    这是我的 pandas 数据框的示例 它包含接近 100k 行 import pandas as pd df pd DataFrame cluster 5 5 5 5 5 5 mdse item i 23627102 23627102 23
  • 检查文件夹是否有文件

    我有一个程序可以将哪些文件夹已满或为空写入数据库 现在我正在使用 bool hasFiles false Directory GetFiles path Length gt 0 hasFiles true hasFiles false 但这
  • Android:如何使用 Volley 处理来自服务器的消息错误?

    我在用Volley让我的 Android 应用程序从我的服务器获取数据 除非处理来自我的服务器的错误 否则它运行良好 当出现错误时 我的服务器会发送此响应 status 400 message Errors 2 A name is requ
  • Gradle --显示版本

    Maven 的 Gradle 模拟是什么 show version option V show version Display version information WITHOUT stopping build 输出包括 Maven Ja
  • 是否可以替换为 data.table[i, j , by] 中的 `i` 元素

    我想知道是否可以将表达式替换为idata table 的一部分 我设置了一个深度嵌套的列表 其中包含预设参数 以根据用户在闪亮的应用程序中选择的子组来执行子集设置 我怀疑这是不可能的 但我希望能以某种方式得到确认 如果不可能 我欢迎任何替代
  • 更改数组索引以显示下一张幻灯片

  • Homebrew 公式中的替代依赖项(例如与 gcc 一起使用)

    如何在 Homebrew 公式中描述替代依赖关系 我正在考虑两种不同的类型 1 替代套餐 我的公式可能取决于包装P or Q 但它必须有其中之一 所以 我想要 depends on P or depends on Q 我至少需要一个 2 同
  • NSCoder 和自定义类型

    如何使用 NSCoder 来编码和解码自定义类型 例如 您将如何将 NSCoder 与 的实例一起使用 STATE where typedef enum ON OFF STATE 您可以将它们视为整数 因为它们是隐式分配的整数值 void
  • self.view = someController.view 与 [self.view addSubview:someController.view]

    我正在尝试找出我遇到的错误 最初 我的同事只是使用以下命令将视图添加到子视图中 self view addSubview someController view 来自当前 ViewController 这看起来不错 但有点迟缓 我想根据需要
  • 如何将更新的 git-hash 嵌入到 Version.hpp 中?

    原标题 如何让 git 忽略我的文件 无论分支如何 我有以下结账后文件 它按预期工作 usr bin ruby cmd ENV HOME dev pitbull cpp bin gen version rb write cmd gen ve
  • H264 帧查看器

    您知道有什么应用程序可以向我显示单个 H264 帧的所有标头 参数吗 我不需要解码它 我只是想看看它是如何构建的 我想到了三种方法 如果您正在寻找免费的东西 否则谷歌 h264分析 以获取付费选项 下载h 264解析器 http www w
  • 我想使用 SQL 选择查询从选定的月份和年份中找到两个值

    单击此处查看输出 https i stack imgur com if28I png 这是我的选择查询 First query SELECT YEAR SUM amount AS total FROM accounts WHERE MONT
  • Perl - eval 不捕获“use”语句

    我想检测用户何时缺少所需的模块 并打印一条友好的错误消息 解释他们需要安装的内容 到目前为止 我尝试将其放在脚本的开头 eval use IO Uncompress Gunzip qw gunzip GunzipError if die E
  • C# JsonSerializer.Serialize 返回一个空对象

    我遇到了有关将结构序列化为 JSON 的问题 所以 我有一个结构 坐标 namespace CoordinatesNameSpace public struct Coordinates public Coordinates string k