我正在尝试使用以下代码将匿名类型序列化为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
我是JSON的新手.现在,我需要为我的Flash ActionScript 3.0使用JSON.所以我找到了一个用于JSON的库,我看到了术语"反序列化"和"序列化".他们的意思是什么?
serialization json deserialization json-deserialization json-serialization
有没有办法忽略 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) 我需要 进一步回答有关使 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)
但使用该方法也不会影响(错误)结果。还有其他提示吗?
情况:我有多个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响应显式地命名它包含的内容.
我正在尝试从刚刚移植到 .NET 6(隔离托管模型)的 Azure Function 中的代码调用 Web API。我利用迁移的机会摆脱了 RestSharp 和 Json.NET 依赖项,现在只使用HttpClient和System.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
我正在使用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吗?
我正在.net核心项目中工作。我想使用JavaScriptSerializer序列化对象。
JavaScriptSerializer Serializer = new JavaScriptSerializer();
Run Code Online (Sandbox Code Playgroud)
我添加了命名空间using System.Web.Script.Serialization;。它引发错误。我用谷歌搜索。我看到.net核心项目System.Web.Script.Serialization;在某些站点中没有。
有没有其他方法可以序列化.net核心中的对象(如JavaScriptSerializer)?
考虑以下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 自动生成方法fromJson和toJson类型Map<String, dynamic json>。
json_serializable 中是否有任何方法可以List<dynamic> 使用自动生成的方法而不是手动进行解析?
我正在尝试为一个对象生成 json 辅助函数,该函数包含一个具有抽象类类型的列表,如下所示:
\nimport '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}\nRun 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\nRun Code Online (Sandbox Code Playgroud)\nabstract class ExerciseRoutine {}\nRun 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)