C # Reflexion: Erhält die Felder eines DataRow aus einem typisierten Dataset
-
08-07-2019 - |
Frage
Ich bin derzeit der Aufbau eine Methode, die ein Objekt übernimmt, die von einem typisierten DataSet vom Typ DataRow
ist, und dann eine Zeichenfolge in JSON Format der Felder in der DataRow (zur Verwendung in einem Web-Service).
Mit dem System.Reflection
verwenden, ich bin so etwas wie dies zu tun:
public string getJson(DataRow r)
{
Type controlType = r.GetType();
PropertyInfo[] props = controlType.GetProperties();
foreach (PropertyInfo controlProperty in props)
{
}
return "";
}
Und dann in der foreach
Aussage, würde ich jedes Feld durchlaufen und die Feldnamen und Wert erhalten, und formatieren Sie es in JSON.
Das Problem ist, dass, wenn über die props
(vom Typ PropertyInfo[]
) iteriert, erhalte ich Eigenschaften, die ich will nicht iteriert werden:
alt text http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif
Wie Sie aus dem obigen Bild sehen können, ich brauche nur die Felder, die von 0 - 11
im props
Array-Bereich, denn das ist die ‚realen Felder‘ dieses besonderes typisierte Reihe sind.
Meine Frage ist also, Wie kann ich die Felder der typisierten DataRow erhalten nur, und nicht die anderen ‚Metadaten‘?
[UPDATE mit Lösung]
Wie Mehrdad Afshari vorgeschlagen, anstelle von Reflection
verwenden, ich die Table.Columns
Array verwenden.
Hier ist die fertige Funktion:
public string GetJson(DataRow r)
{
int index = 0;
StringBuilder json = new StringBuilder();
foreach (DataColumn item in r.Table.Columns)
{
json.Append(String.Format("\"{0}\" : \"{1}\"", item.ColumnName, r[item.ColumnName].ToString()));
if (index < r.Table.Columns.Count - 1)
{
json.Append(", ");
}
index++;
}
return "{" + json.ToString() + "}";
}
Lösung
Warum nicht Sie verwenden row.Table.Columns
Eigenschaft statt Reflexion?