我是Java和Jackson的新手以及我尝试使用的许多其他技术,所以我会给出一个详细的答案.
有没有办法阻止一个或多个字段使用Jackson序列化为JSon String_like格式,但没有使用任何类型的JSon注释?
像mapper.getSerializationConfig()之类的东西.某事(忽略("displayname"))如果你知道我的意思.我的对象是一个扩展另一个类的类的实例,并且实现了一个接口,所以这些字段来自类的层次结构.我需要该对象的JSon表示,但只包含某些字段,因此我可以通过POST方法在模拟请求中发送该Json.我正在使用Jackson 2.2.2.提前致谢.
我是飞镖开发的新手...
我不知道如何使用带有枚举类型的 Json_serializable 包。我的数据库将枚举值作为整数,但看起来 JSON_Serializable 希望该值是枚举名称的字符串表示形式.. IE:
枚举分类 { 无、打开、不活动、关闭、默认、删除、零记录}
数据库将分类作为整数值(4:这是默认值)
从 JSON 加载时出现异常
例外:无效参数:4不是支持的值之一:None、Open、Inactive、Closed、Default、Delete、ZeroRecord
如何强制 JSON_Serializable 将 4 视为“默认”?
我的应用程序需要(几乎默认)JSON 序列化设置:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
});
Run Code Online (Sandbox Code Playgroud)
仅对于一个控制器,我需要为两个输入使用不同的命名策略(我使用模型绑定[FromBody] myComplexObject和输出
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
Run Code Online (Sandbox Code Playgroud)
我的问题几乎与Web API相同:在操作或控制器级别配置 JSON 序列化程序设置,但我要求的 AspNet Core 2.2+IControllerConfiguration已不再存在。
Core 2.1+ 等效问题在这里有一个回复:Configure input/output formatters on controllers with ASP.NET Core 2.1
那里的答案似乎有些零散或不完整 - 很难想象没有更简单的方法可以实现这一目标。有人会知道如何在单个控制器中为所有输入和输出使用 DefaultContractResolver 吗?
我只是想通过在 Blazor 应用程序中使用 Http POST 方法
public async Task CreateUnit(UnitEntity unit)
{
await _http.PostJsonAsync<UnitEntity>("api/units", unit);
}
Run Code Online (Sandbox Code Playgroud)
_http 和 myObject 已在别处定义,但我收到了这个奇怪的错误。任何人都可以帮忙吗?这是我在其他地方能找到的最接近的东西:https : //github.com/dotnet/runtime/issues/30945。
完整的错误信息是
System.Text.Json.JsonException:输入不包含任何 JSON 标记。当 isFinalBlock 为 true 时,期望输入以有效的 JSON 令牌开头。路径:$ | 行号:0 | 字节位置内联:0。
这是堆栈
目前,我正在尝试使用JsonFormatters序列化ISO 8601规范中的字符串.在我的启动配置中格式化,但无法使其工作.
我的启动配置如下:
services.AddMvcCore(
(options) => {
options.SslPort = 44321;
options.Filters.Add(new RequireHttpsAttribute());
}
)
.AddJsonFormatters(jsonSerializerSettings => {
jsonSerializerSettings.DateParseHandling = DateParseHandling.None;
jsonSerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffZ";
})
.AddApiExplorer()
.AddJsonOptions(options => {
options.AllowInputFormatterExceptionMessages = false;
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
Run Code Online (Sandbox Code Playgroud)
我也尝试过文档中提到的ServiceStackText,但这也没有用.
NodaSerializerDefinitions.LocalTimeSerializer.ConfigureSerializer();
DateTimeZoneProviders.Tzdb
.CreateDefaultSerializersForNodaTime()
.ConfigureSerializersForNodaTime();
Run Code Online (Sandbox Code Playgroud)
我一直得到以下格式,
即LocalDate序列化:
{
"patientDob": "Thursday, June 15, 2017",
}
Run Code Online (Sandbox Code Playgroud)
如何配置字符串ISO 8601规范.NodaTime全局格式化日期类型?
我的模特,
{
public LocalDate patientDob { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和我的视图模型/ API资源: …
你好,我想从它的api. 但我不知道如何制作正确的格式。
我想postasync从这个 api: https://appcenter.ms/api/v0.1/apps/KacangIjo/ShopDiaryApp/push/notifications
Headers 需要的是:X-API-Token ="{api token}" 和 Content Type="application/json"
对于正文(内容),我想这样写:
{
"notification_content" : {
"name" : "Campaign Name",
"title" : "Expired Warning",
"body" : "You have items that almost expired"
}
}
Run Code Online (Sandbox Code Playgroud)
我在如何为 HttpClient 编写正确的格式时遇到了困难。我试过这个,没有工作..
Content = new Content
{
Name = "Campaign Name",
Title = "Expired Warning",
Body = "You have items that almost expired"
};
using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) })
{
var myContent = JsonConvert.SerializeObject(data); …Run Code Online (Sandbox Code Playgroud) 使用Jackson进行序列化,有@JsonRawValue注解实现字符串值不带引号序列化。例如,使用以下代码
data class SomeData {
@JsonRawValue
value: String
}
Run Code Online (Sandbox Code Playgroud)
我可以序列化SomeData("{}")并获取:
{ "value": {} }
Run Code Online (Sandbox Code Playgroud)
(如果没有注释,那就是{ "value": "{}" }。)
我想使用 Kotlin 序列化来实现相同的目的。
我想要这个的原因是我通过 Rest 获取一个对象,将其存储在数据库中,稍后从那里加载它并返回它而不更改内容。我不关心对象中包含什么。所以我绝对不需要以任何方式解析或反序列化它。在最坏的情况下,内容会在过程中的某个地方被更改。在最好的情况下,这只是一些多余的计算。
kotlinx-serialization 中似乎没有相应的机制支持这种开箱即用的操作。查看源代码,似乎我需要一个带有 a 的类JsonPrimitive(或JsonLiteral)实例String value,但isString设置为 false,但没有办法得到它。
另一种方法可能是编写一个序列化器来序列化String不带引号的值,但我不知道如何实现。
我正在使用 .net Maui MVVM 源生成器来创建属性作为可观察属性。我正在使用 System.Text.Json.Serialization 将类的属性序列化为 JSON。当我在某些属性上使用 [JsonIgnore] 时,它们仍然会序列化为 JSON。还有其他方法可以忽略属性吗?
我认为问题是我将装饰器放在私有属性声明上,而不是公共属性声明上,因为公共属性是在依赖项 -> 分析器 -> CommunityToolkit.Mvvm.SourceGenerators 中创建的。
c# data-binding json-serialization maui community-toolkit-mvvm
我刚刚将 ASP.NET Core 项目从 2.2 升级到 3.1,现在我的模型绑定不适用于 POST 请求。我读到默认的 JSON 序列化器在 .NET Core 3 中从 Newtonsoft.JSON 更改为 System.Text.Json。这可能是原因吗?
我的动作和课程看起来像这样
[HttpPost]
public IActionResult Foo([FromBody]Bar req)
Run Code Online (Sandbox Code Playgroud)
public class Bar
{
public string Fiz;
public int Buzz;
}
Run Code Online (Sandbox Code Playgroud) 例如,我有几种类型的汽车正在序列化为 .car 文件(这是一个学校项目)。我有三种不同的车型:福特、雷克萨斯和道奇。我可以很好地拯救他们。但是根据我的程序的当前架构,当我反序列化时,我需要在反序列化之前知道类型。例如我这样序列化:
if (CurrentCar.GetType() == typeof(Ford))
{
var JSON_CAR = JsonSerializer.Serialize((Ford)CurrentCar);
writer.Write(JSON_CAR);
}
Run Code Online (Sandbox Code Playgroud)
当我反序列化时,我需要在反序列化之前知道类型:
CurrentCar = JsonSerializer.Deserialize<???>(reader.ReadString());
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?谢谢。
c# serialization json json-deserialization json-serialization
c# ×5
json ×5
asp.net-core ×2
blazor ×1
dart ×1
data-binding ×1
httpclient ×1
jackson ×1
java ×1
kotlin ×1
maui ×1
nodatime ×1