EDIT: entfernt ersten Teil der Frage, wie es irreführend und nicht vollständig relevant war.Warum funktioniert eine implizite Konvertierung von int nach intBox nicht in Json.decode oder Standardmodellbindung?
Aus verschiedenen Gründen bin ich an den Punkt gekommen, an dem ich wirklich die Möglichkeit nutzen konnte, einige meiner Post-Body-Parameter in ihrem Modell zu verpacken.
Ich habe damit begonnen, nur das Standardmodell Binder akzeptieren würde funktionieren ™, was es tut, aber nicht für Ints (?!). Beispiel:
public class IntBox
{
public int Value;
public IntBox(int value)
{
Value = value;
}
public static implicit operator IntBox(int value)
{
return new IntBox(value);
}
}
public class StringBox
{
public string Value;
public StringBox(string value)
{
Value = value;
}
public static implicit operator StringBox(string value)
{
return new StringBox(value);
}
}
public class BoolBox
{
public bool Value;
public BoolBox(bool value)
{
Value = value;
}
public static implicit operator BoolBox(bool value)
{
return new BoolBox(value);
}
}
public class NeedQuery : StateFullQuery
{
public StringBox[] TestStrings { get; set; } //"TestStrings":["a","b"]
public IntBox[] TestInts { get; set; } //"TestInts":[1,2,3,4]
public BoolBox[] TestBools { get; set; } //"TestBools":[true,false]
}
//Inside Controller:
public string Post([FromBody]NeedQuery query)
{
//At this point query.TestStrings contains two StringBoxes with the expected values. As does query.TestBools
// However, query.TestInts is empty.
}
Was vermisse ich ?! Was ist an Ints so besonders, dass sie vom Modelbinder nicht implizit abgegeben werden können? Wie komme ich hier zurecht?
Würde wirklich Hilfe bei diesem zu schätzen wissen; ohne eine große Umschrift bin ich blockiert, bis ich es herausfinden kann.
HINWEIS: Wenn ich sage, dass ich die int-Werte boxen muss, ist das eine Vereinfachung des Problems für den Beitrag, es ist ein bisschen komplizierter als einfach die Werte zu boxen.
Wenn dies der Fall war, warum funktioniert die implizite Umwandlung nach String und Bool im zweiten Beispiel, aber nicht die Int? – Glitcher
@Glitcher, das ist eine gute Frage - Ich bin überrascht, dass funktioniert (https://dotnetfiddle.net/cztCKK). Wenn das das Verhalten ist, das Sie sehen, dann muss etwas anderes für diese Eigenschaften geschehen, bevor das Standard-Modellbinder den üblichen Weg zum Einstellen von Eigenschaften erreicht ... –
Ich arbeite im Moment daran, dank Ihrer Antwort, aber ich würde gerne wissen, warum das so schlecht scheitert – Glitcher