我有一个ASP。NET核心Web APIendpoint,它接受(FromBody)下面定义的搜索对象
public class Search {
public int PageSize {get;set;}
public Expression Query{get;set;}
}
Public class Expression {
public string Type {get;set;}
}
public class AndExpression {
public IList<Expression> Expressions {get;set;}
}
public class MatchesExpression {
public string FieldId {get;set;}
public string Value {get;set;}
public string Operator {get;set;}
}
因此...如果我将以下JSON发布到我的endpoint
{“pageSize”:10,“query”:{“fieldId”:“body”,“value”:“cake”,“operator”:“matches”}
我成功地获取了一个搜索对象,但查询属性的类型是Expression,而不是MatchesExpression。
这显然是一个多态性问题。
本文(接近尾声)给出了一个很好的例子,说明了在整个模型都是多态的情况下如何处理这个问题。
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-5.0
在我的例子中,我的模型“Query”的属性是多态的,所以我不确定如何为我的搜索对象构建ModelBinder,以允许我处理查询属性
我想,我需要编写一个模型绑定器来构造搜索对象,然后按照为属性描述的模式进行操作,但是我找不到任何关于如何实现一个模型绑定器的示例。
关于如何实现这一点,有什么建议吗?好的信息来源?
所以。。我放弃了ModelBinder(因为我使用的FromBody属性与我的目标不兼容)。
相反,我写了一个系统。文本处理多态性的Json JsonConvertor(参见下面的shonky代码)
using Searchy.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace Searchy
{
public class ExpressionJsonConverter : JsonConverter<Expression>
{
public override Expression Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
Utf8JsonReader readerClone = reader;
using (var jsonDocument = JsonDocument.ParseValue(ref readerClone))
{
if (!jsonDocument.RootElement.TryGetProperty("type", out var typeProperty))
{
throw new JsonException();
}
switch (typeProperty.GetString())
{
case "comparison":
return JsonSerializer.Deserialize<Comparison>(ref reader, options);
case "and":
return JsonSerializer.Deserialize<And>(ref reader, options);
}
}
return null;
}
public override void Write(
Utf8JsonWriter writer,
Expression expression,
JsonSerializerOptions options)
{
}
}
}
我的表达式类也有以下属性
[JsonConverter(typeof(ExpressionJsonConverter))]
我有一个ASP. NET核心Web API。 一个endpoint,它接受一个名为搜索的模型。它有一个名为表达式类型查询的属性。这个表达式对象有子类。 我将以下JSON发布到我的endpoint(应用程序的内容类型/JSON) {"查询":{"字段ID":"主体","值":"蛋糕","运算符":"匹配"}} 首先,查询参数只是基本表达式——一个多态性问题! 所以我以为是定制的模型活页夹。 我可以针
javafx属性是将数据模型连接到javafx gui的好方法,因为它们的绑定模型实现了强大的通知更新机制。 属性和绑定并不严格地与GUI相关,而是对JavaBeans的扩展。 因此,我们希望在应用程序模型类中使用它们,而不引入对包的依赖关系,并且通常来自. 换句话说:(update) 我可能需要将应用程序分成两个模块。 一个模块应该只包含操作数据的类(模型类,说MVC)。 第二个模块将包含所有图
我得到了这个错误 属性内的内插已被删除。改用v-bind或冒号速记。例如,代替
我在视图中定义了一个剑道下拉列表,如下所示: 我的模型有一个
我的Html代码是这样的。 课程:- 当我调用MVC控制器时,通过上层输入,绑定就发生了。以下方法的方法 x中的值是 但是当我在web api中尝试同样的事情时,它给了我415(不支持的媒体类型)。方法如下 它没有绑定,而是给出了415状态代码,上面写着不支持的媒体类型。我知道这么问很蠢但为什么会这样?如果我想做相同的绑定发生在mvc如何实现?我不想做这样的事 有没有办法做到这一点?
我在一个Vue项目上工作,实际上我试图将img src属性绑定到数据值,然后我使用setInterval函数动态更改url每次调用函数,但当我运行页面时,我得到一个错误就像 属性或方法“源”不是在实例上定义的,而是在呈现过程中引用的。通过初始化属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件。见:https://vuejs.org/v2/guide/reactivity.htm