web-dev-qa-db-fra.com

Comment puis-je convertir un objet de classe en chaîne?

J'ai un objet de classe qui provient d'un service Web (WCF). La classe a des propriétés de type String et certains types de classe personnalisés.

Comment puis-je obtenir le nom de la propriété et le nom des propriétés des propriétés qui sont de type classe personnalisée.

J'ai essayé la réflexion en utilisant GetProperies (), mais j'ai échoué. GetFields () m'a donné un certain succès si le type de propriété est de type chaîne, je veux également obtenir les propriétés des propriétés de type personnalisé.

Voici mon code.

public static string ToClassString(this object value)
{
    if (value == null)
        return null;
    var builder = new StringBuilder();
    builder.Append(value.GetType().Name + "{ ");
    foreach (var prop in value.GetType().GetFields(
BindingFlags.Public
| BindingFlags.Static | BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.GetProperty))
    {
        builder.Append("{ ");
        builder.Append(prop.Name + " , ");
        switch (prop.FieldType.Namespace)
        {
            case "System":
                builder.Append(prop.GetValue(value) + " }");
                break;
            default:
                builder.Append(prop.GetValue(value).ToClassString() + " }");
                break;
        }
    }
    builder.Append("}");
    return builder.ToString();
}

J'ai obtenu la sortie comme

NotifyClass {{UniqueId, 16175} {NodeInfo, NodeInfo {}} {EventType, SAPDELETE}}

Voici la classe dont l'instance je veux convertir en chaîne

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="NotifyReq", WrapperNamespace="wrapper:namespace", IsWrapped=true)]
public partial class Notify
{

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=0)]
    public int UniqueId;

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=1)]
    public eDMRMService.NodeInfo NodeInfo;

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="custom:namespace", Order=2)]
    public string EventType;

    public Notify()
    {
    }

    public Notify(int UniqueId, eDMRMService.NodeInfo NodeInfo, string EventType)
    {
        this.UniqueId = UniqueId;
        this.NodeInfo = NodeInfo;
        this.EventType = EventType;
    }
}        
14
Kishore Kumar

Pas besoin de réinventer la roue. Utilisez Json.Net

string s = JsonConvert.SerializeObject(yourObject);

C'est tout.

Vous pouvez également utiliser JavaScriptSerializer

string s = new JavaScriptSerializer().Serialize(yourObject);
57
I4V