Jag försöker konvertera ett objekt till dynamisk typ men konverteringen misslyckas med RunTimeBinder undantag

Jag försöker konvertera ett objekt till dynamisk typ men konverteringen misslyckas med RunTimeBinder undantag

Här är en förlängningsmetod för att konvertera ett objekt till dynamiskt

public static dynamic ToDynamic(this object value)
    {
        IDictionary<string, object> expando = new ExpandoObject();

        foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
            expando.Add(property.Name, property.GetValue(value));

        return expando as ExpandoObject;
    }

du bör använda JsonConvert. Först av allt, serialisera objekt till sträng, sedan avserialisera sträng till dynamiskt.

string str = JsonConvert.SerializeObject(objectstring);
dynamic obj = JsonConvert.DeserializeObject(str);

Undantaget är:

Cannot dynamically invoke method 'Write' because it has a Conditional attribute

Och när du kontrollerar möjliga Debug.WriteLine-ingångar är "dynamisk" inte en av dem. Så du måste casta den, till sträng till exempel:

    string strForWriteLine = dynSum.ToString() as string;
    Debug.WriteLine(strForWriteLine);

Hoppas detta hjälper

*Edit:Lite detaljer om dynSum.ToString() som sträng; När du bara använder ToString() får du fortfarande en dynamisk sträng.

var strForWriteLine = dynSum.ToString();

strForWriteLines typ är dynamisk { sträng }