Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Json Fehler: Eine Methode wurde zu einem unerwarteten Zeitpunkt aufgerufen

09.08.2018 (👁12080)


Problem:

Bei Auswerten einer Api Schnittstelle, welche eine reine Werte-Liste zurückgibt, kommt der Fehler dass die Methode zu eine unerwarteten Zeitpunkt aufgerufen wurde.

Lösung:

Beim Auswerten von Json Rückgaben werden die Rückgabewerte mit integrierten Datenmodellen mit JsonObjekt auswertet.

Wenn es sich um reine Strings oder Zahlen handelt, dann muss man die Werte mit getNumber() auswerten.

Json Fehler:

System.InvalidOperationException

  HResult=0x8000000E

  Message=
A method was started at an unexpected time

Eine Methode wurde zu einem unerwarteten Zeitpunkt aufgerufen.

Dies ist kein Objektwert. Verwenden Sie die ValueType-Eigenschaft zum Abrufen des Typs.

  Source=Windows.Data

  StackTrace:

   at Windows.Data.Json.JsonValue.GetObject()

..

 

Fehler bei der Umwandlung

Es kommen reine Zahlenwerte vom Typ Long an.

JsonObject jsonObject = jsonRow.GetObject();

Name

Value

Type

jsonArray

{[10073,10072,10071,10070,10069,10068,10067,10066,10065,10064,10063]}

Windows.Data.Json.JsonArray

jsonRow

{10073}

Windows.Data.Json.IJsonValue {Windows.Data.Json.JsonValue}

jsonRow.GetNumber()

10073

double

Die Umwandlung von einer Asp api mit der Rückgabe eines Datenmodels wurde bisher wie dieser Code umgewandelt.

Dabei wird das Datenmodel in ein JsonObjekt gelesen und der einzelen Feldwert mit jsonObject["Feld"].ToString() umgewandelt

JsonObject jsonObject = jsonRow.GetObject();

 

//< values >

string sID_on_Server = jsonObject["idProject"].ToString();

//</ values >

 

long ID_on_Server = 0;

try

{

    ID_on_Server = Convert.ToInt64(sID_on_Server);

}

catch { }

Lösung Code

Im neuen Code wird der Wert direkt als Double von der Json-Variable ausgelesen mit .GetNumber()

double dblValue = jsonRow.GetNumber();

long ID_on_Server = Convert.ToInt64( dblValue);

 

 

Api auf der Serverseite:

Auf der Asp.Net Core MVC WebApi Seite wird eine Liste mit long Werten zurückgeben.

Ohne Datenmodell sondern nur Zahlenreihen.

List<long> dataList = query.ToList();

 

 

// GET: /api/index

public async Task<List<long>> Index()

{

    //-------------< Index >------------- 

    //< get UserClaim Info >

    //*get User from Token

    var userClaim_in_Token = HttpContext.User.Claims.Where(c => c.Type == ClaimsIdentity.DefaultNameClaimType).FirstOrDefault(); //User as Name

    if(userClaim_in_Token==null)

    {

        return null;

    }

    string sEmail = userClaim_in_Token.Value;

    //</ get UserClaim Info >

 

    //< check user >

    long IDCurrent_User = await Get_UserID(sEmail);

    if (IDCurrent_User == 0) { return null; }

    //</ check user >

 

 

    //--< Get Linq.Query >--

    //*gets last 10 Projects with View_Sum

    var query = (from project in _dbContext.tbl_Projects

                 where project.IDOwner == IDCurrent_User

                 orderby project.IDProject descending

                 select  project.IDProject).Take(3000);

    //--</ Get Linq.Query >--

 

 

    //----< fill Data_to_View >----

    List<long> dataList = query.ToList();

    

 

    //< out >

    //*output to client

    return dataList;

    //</ out >

    //-------------</ Index >------------- 

}