标签: json-serialization

如何将C#匿名类型序列化为JSON字符串?

我正在尝试使用以下代码将匿名类型序列化为JSON:

var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray()); 
Run Code Online (Sandbox Code Playgroud)

但是,执行此操作时会出现以下异常:

类型'<> f__AnonymousType1`3 [System.Int32,System.Int32,System.Object []]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.

我不能将属性应用于匿名类型(据我所知).有没有其他方法来进行此序列化或我错过了什么?

c# json anonymous-types json-serialization datacontractjsonserializer

158
推荐指数
7
解决办法
11万
查看次数

什么是JSON中的反序列化和序列化?

我是JSON的新手.现在,我需要为我的Flash ActionScript 3.0使用JSON.所以我找到了一个用于JSON的库,我看到了术语"反序列化"和"序列化".他们的意思是什么?

serialization json deserialization json-deserialization json-serialization

99
推荐指数
2
解决办法
10万
查看次数

标志忽略属性 build_runner 的序列化

有没有办法忽略 JsonSerializable 类中属性的序列化?

我正在使用 build_runner 生成映射代码。

实现此目的的一种方法是在 .g.dart 文件中注释该特定属性的映射,尽管如果可以在属性上添加 ignore 属性会很棒。

import 'package:json_annotation/json_annotation.dart';

part 'example.g.dart';

@JsonSerializable()
class Example {
  Example({this.a, this.b, this.c,});

  int a;
  int b;

  /// Ignore this property
  int c;

  factory Example.fromJson(Map<String, dynamic> json) =>
      _$ExampleFromJson(json);

  Map<String, dynamic> toJson() => _$ExampleToJson(this);
}
Run Code Online (Sandbox Code Playgroud)

这导致

Example _$ExampleFromJson(Map<String, dynamic> json) {
  return Example(a: json['a'] as int, b: json['b'] as int, c: json['c'] as int);
}

Map<String, dynamic> _$ExampleToJson(Example instance) =>
    <String, dynamic>{'a': instance.a, 'b': instance.b, 'c': instance.c};
Run Code Online (Sandbox Code Playgroud)

我所做的就是通过注释 c 的映射来实现这一点。

Example …
Run Code Online (Sandbox Code Playgroud)

dart flutter json-serialization

14
推荐指数
3
解决办法
4559
查看次数

嵌套数据类的 Json 序列化

我需要 进一步回答有关使 Python json 编码器支持 Python 的新数据类的问题:考虑它们何时处于嵌套结构json serialization of @dataclass

考虑:

import json
from attr import dataclass
from dataclasses_json import dataclass_json
@dataclass
@dataclass_json
class Prod:
    id: int
    name: str
    price: float

prods = [Prod(1,'A',25.3),Prod(2,'B',79.95)]
pjson = json.dumps(prods)
Run Code Online (Sandbox Code Playgroud)

这给了我们:

TypeError: Object of type Prod is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

请注意,上面确实包含了答案之一/sf/answers/4178169831/。它声称通过装饰器支持嵌套案例dataclass_json。显然这实际上行不通。

我还尝试了另一个答案/sf/answers/3590072461/

class EnhancedJSONEncoder(json.JSONEncoder):
        def default(s, o):
            if dataclasses.is_dataclass(o):
                return dataclasses.asdict(o)
            return super().default(o)
Run Code Online (Sandbox Code Playgroud)

我为它创建了一个辅助方法:

def jdump(s,foo):
    return json.dumps(foo, cls=s.c.EnhancedJSONEncoder)
Run Code Online (Sandbox Code Playgroud)

但使用该方法也不会影响(错误)结果。还有其他提示吗?

python json-serialization python-dataclasses

14
推荐指数
1
解决办法
2万
查看次数

使命名元组的名称出现在序列化的JSON响应中

情况:我有多个Web服务API调用来提供对象结构.目前,我声明显式类型将这些对象结构绑定在一起.为简单起见,这是一个例子:

[HttpGet]
[ProducesResponseType(typeof(MyType), 200)]
public MyType TestOriginal()
{
    return new MyType { Speed: 5.0, Distance: 4 };
}
Run Code Online (Sandbox Code Playgroud)

改进:我有很多这样的自定义类MyType,并且喜欢使用通用容器.我遇到了命名元组,可以在我的控制器方法中成功使用它们,如下所示:

[HttpGet]
[ProducesResponseType(typeof((double speed, int distance)), 200)]
public (double speed, int distance) Test()
{
    return (speed: 5.0, distance: 4);
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是已解析的类型是基于Tuple包含这些无意义属性的底层Item1,Item2等等.示例:

在此输入图像描述

问题:有没有人找到一个解决方案来将命名元组的名称序列化为我的JSON响应?或者,有没有人找到一个通用的解决方案,允许为可以使用的随机结构提供单个类/表示,以便JSON响应显式地命名它包含的内容.

c# json tuples asp.net-web-api json-serialization

11
推荐指数
4
解决办法
1865
查看次数

在.NET 6隔离的Azure函数中指定JsonSerializerOptions

我正在尝试从刚刚移植到 .NET 6(隔离托管模型)的 Azure Function 中的代码调用 Web API。我利用迁移的机会摆脱了 RestSharp 和 Json.NET 依赖项,现在只使用HttpClientSystem.Text.Json处理 HTTP 调用和 JSON 内容。

我确实尝试使用这段代码,它看起来是完美的组合:

Project project = await _httpClient.GetFromJsonAsync<Project>(someUrl);

if (project != null)
{
    HttpResponseData callResponse = req.CreateResponse(HttpStatusCode.OK);
    
    await callResponse.WriteAsJsonAsync(project);
    
    return callResponse;
}
Run Code Online (Sandbox Code Playgroud)

通话工作正常 - 我Project顺利取回了我的对象。

但不幸的是,使用这段代码,我似乎无法影响响应中 JSON 的渲染方式 - 例如,在我的例子中,null返回值(我想避免),并且所有属性名称都大写(“Institute”,而不是“研究所”、“LeadLanguage”而不是“leadLanguage”)。

没问题 - 只需使用一个JsonSerializerOptions对象并定义你想要的,我想。当然,我可以创建这样一个对象 - 但我要把它插入哪里?

WriteAsJsonAsync似乎不支持任何序列化器选项作为参数(为什么??),并且我找不到全局定义我的方法JsonSerializerOptions(因为我找到的所有内容似乎都基于该services.AddControllers().AddJsonOptions()方法 - 自从我的Azure函数以来我就无法使用该方法AddControllers其启动代码中没有该部分)。

我已经通过这样做得到了我想要的结果:

if (project != null)
{
    HttpResponseData callResponse = req.CreateResponse(HttpStatusCode.OK);
    
    callResponse.Headers.Add("Content-Type", …
Run Code Online (Sandbox Code Playgroud)

c# azure-functions json-serialization system.text.json .net-6.0

9
推荐指数
1
解决办法
4325
查看次数

网络核心Web API JSON序列化-需要以$开头的字段

我正在使用Net Core Web API,需要返回属性名称为“ $ skip”的有效负载。我尝试使用DataAnnotations:

public class ApiResponseMessage
{
    [Display(Name ="$skip", ShortName = "$skip")]
    public int Skip { get; set; }
    [Display(Name = "$top", ShortName = "$top")]
    public int Top { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我只是使用

return Json(payload)
Run Code Online (Sandbox Code Playgroud)

但是,我的响应有效负载如下所示:

"ResponseMsg": {
    "Skip": 0,
    "Top": 3
}
Run Code Online (Sandbox Code Playgroud)

我需要它是:

"ResponseMsg": {
    "$skip": 0,
    "$top": 3
}
Run Code Online (Sandbox Code Playgroud)

解决此问题的最佳选择是什么?我需要编写自己的ContractResolver或Converter吗?

c# asp.net-core json-serialization

7
推荐指数
3
解决办法
5108
查看次数

.net核心项目中不允许JavaScriptSerializer?

我正在.net核心项目中工作。我想使用JavaScriptSerializer序列化对象。

JavaScriptSerializer Serializer = new JavaScriptSerializer();
Run Code Online (Sandbox Code Playgroud)

我添加了命名空间using System.Web.Script.Serialization;。它引发错误。我用谷歌搜索。我看到.net核心项目System.Web.Script.Serialization;在某些站点中没有。

有没有其他方法可以序列化.net核心中的对象(如JavaScriptSerializer)?

jsonserializer json-serialization asp.net-core-2.1

7
推荐指数
2
解决办法
5709
查看次数

在 Flutter 中使用 json_serializable 库解析 List&lt;dynamic&gt;

考虑以下json:

[
 {
  "id": 1
  "name": "foo"
 },
 {
  "id": 1
  "name": "foo"
 }
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用json_serializable库来解析它。

json.decode(response.body)返回List<dynamic>

但 json_serializable 自动生成方法fromJsontoJson类型Map<String, dynamic json>

json_serializable 中是否有任何方法可以List<dynamic> 使用自动生成的方法而不是手动进行解析?

flutter json-serialization flutter-dependencies

7
推荐指数
1
解决办法
1789
查看次数

Dart JsonSerialized 与抽象类

我正在尝试为一个对象生成 json 辅助函数,该函数包含一个具有抽象类类型的列表,如下所示:

\n
import 'package:json_annotation/json_annotation.dart';\n\nimport 'exercise-variations.a.dart';\n\npart 'routine.model.g.dart';\n\n@JsonSerializable()\nclass Routine {\n\n  List<ExerciseRoutine> exercises;\n\n  Routine();\n\n  factory Routine.fromJson(Map<String, dynamic> json) => _$RoutineFromJson(json);\n\n  Map<String, dynamic> toJson() => _$RoutineToJson(this);\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n    import 'package:json_annotation/json_annotation.dart';\n    import 'exercise-variations.a.dart';\n\n    part 'base-exercise-routine.g.dart';\n\n    @JsonSerializable()\n    class BaseExerciseRoutine implements ExerciseRoutine {\n      int sets;\n\n      BaseExerciseRoutine();\n\n      factory BaseExerciseRoutine.fromJson(Map<String, dynamic> json) => _$BaseExerciseRoutineFromJson(json);\n\n      Map<String, dynamic> toJson() => _$BaseExerciseRoutineToJson(this);\n    }\n\n
Run Code Online (Sandbox Code Playgroud)\n
abstract class ExerciseRoutine {}\n
Run Code Online (Sandbox Code Playgroud)\n

这样我得到这个错误:

\n
[INFO] Running build...\n[SEVERE] json_serializable:json_serializable on lib/test/routine.model.dart:\nError running JsonSerializableGenerator\nCould not generate `fromJson` code for `exercises` because of type `ExerciseRoutine`.\nNone of …
Run Code Online (Sandbox Code Playgroud)

dart flutter json-serialization

7
推荐指数
1
解决办法
5762
查看次数