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 返回一个空对象 的相关文章

  • .Net Core 中 String 默认不可序列化吗?

    我正在查看其他的 Fortify 静态分析安全测试 SAST 扫描报告 以识别和抑制误报 应用程序框架是C NET Core SAST 报告部分内容如下 Method1 在第 111 行将不可序列化的对象存储为 HttpSessionSta
  • 在静态断言和运行时错误之间自动选择

    我有一个执行除法并检查对齐的宏 define BYTES TO WORDS x CHECK ALIGNMENT x 2 x 2 我想实施CHECK ALIGNMENT作为一个总是返回 1 的宏 并且如果满足以下条件则触发错误x不除以 2 宏
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 实体框架 5 不清除导航属性

    我在 Entity Framework 5 中遇到了这个奇怪的问题 我在其中一个实体中有一个导航属性 我想将其设置为null 但由于某种原因 该属性只有在我第二次调用该属性时才会被清除 using var db new Entities v
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 是否有更好(更简单)的方法来获取特定域 SID?

    我被指派修改 WinForms 应用程序 主要检查登录用户是否属于特定域 这是我到目前为止所想出的 byte domainSid var directoryContext new DirectoryContext DirectoryCont
  • 输入缓冲区刷新

    考虑下面的代码 include
  • 如何检查是否发生溢出? [复制]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 通过 Nuke.Common/NuGet.CommandLine 部署 NuGet 包时如何通过 Azure Auth

    我正在尝试通过 Azure DevOps 上的 Nuke 和 CI CD 自动执行 NuGet 包更新 一切都构建得很好 但在 PushNuGet 步骤中 该过程尝试通过弹出窗口向 Azure 进行身份验证 这显然从未在 in devops
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read
  • 当“多次安装 MSBuild”时,Dotnet 项目转换尝试转换失败

    try convert w Test csproj target framework netstandard2 0 结果是 Multiple installs of MSBuild detected please select one In
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理

随机推荐

  • 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