2016-10-08 8 views
1

Ich verwende das Plugin Newtonsoft.Json in meiner xamarin.forms Anwendung für die Serialisierung und Deserialisierung ein Objekt von TYPR FormDeserializeObject Fehler: Der Wert darf nicht null sein

public class Form 
{ 
    [JsonProperty("id")] 
    public int id { set; get; } 

    [JsonProperty("title")] 
    public string title { set; get; } 

    [JsonProperty("body")] 
    public string body { set; get; } 

    [JsonProperty("department_id")] 
    public string department_id { set; get; } 

    [JsonProperty("fields")] 
    public List<FormField> fields { set; get; } 
} 

public class FormField 
{ 
    [JsonProperty("id")] 
    public int id { set; get; } 

    [JsonProperty("title")] 
    public string label { set; get; } 

    [JsonProperty("inputtype")] 
    public string inputtype { set; get; } 

    [JsonProperty("key")] 
    public string key { set; get; } 

    [JsonProperty("item_order")] 
    public int order { set; get; } 

    [JsonProperty("required")] 
    public bool isRequired { set; get; } 

    [JsonProperty("enabled")] 
    public bool isEnabled { set; get; } 

    public CellCustom fieldObject { set; get;} 


    public FormField() 
    { 
     fieldObject = CreateInstance() as CellCustom; 
    } 

    private object CreateInstance() 
    { 
     return Activator.CreateInstance(Type.GetType("Hura.Models.Cells." + inputtype)); 
    } 

    public Cell createCell() 
    { 
     return fieldObject.createCell(); 
    } 
} 

wird hier der Deserialisieren Code

string str= @"{""id"": 17,""title"": ""testform"",""body"": ""null"",""department_id"": 5,""fields"": [{""id"": 28,""title"": ""null"",""inputtype"": ""text"",""key"": ""f1474532070512"",""item_order"": 1,""required"": true,""enabled"": true}]}"; 
Form tstfrm = JsonConvert.DeserializeObject<Form>(str); 
MainPage = new FillForm(tstfrm); 

Aber wenn ich diesen Code ausführen, gibt es mir den Fehler System.ArgumentNullException: Value cannot be null. Parameter name: type, auch wenn ich keine Felder namens "type" in meinem JSON-Objekt habe!

Was ist das Problem in meinem Code, und wie kann ich es lösen?

Antwort

1

Sie müssen sicherstellen, dass der Typ "Hura.Models.Cells." + inputtype in Ihrer aktuell ausgeführten Assembly oder in mscorlib.dll vorhanden ist. Ist dies nicht der Fall, müssen Sie den Assemblynamen angeben. (Siehe here.)

In Ihrem Beispiel-Code der angeforderten Typ Name ist Hura.Models.Cells.text, die nicht vorhanden ist und deshalb ein auf null auf den Typ-Parameter der Activator.CreateInstance.

Vielleicht ist ein Null-Check genug, aber es hängt davon ab, wie Sie mit dieser Art von Situation umgehen wollen.

+0

Ihre erste Antwort vor der Bearbeitung war die richtige Antwort, vielen Dank viel! Das Problem lag im Klassennamespace. Ich habe versehentlich einen Tippfehler in der Variable "inputtype" gemacht und jetzt funktioniert es gut. Du hast mein Leben gerettet !! Vielen Dank. –

+1

Ich habe einen Rollback meiner Bearbeitung durchgeführt, um Ihre Situation korrekt wiederzugeben. Sie sind herzlich willkommen! Ich bin froh, dass ich dir helfen kann. :-) (Und wenn meine Antwort hilfreich war, kannst du sie natürlich auch upvoten.) – haindl

Verwandte Themen