C# 从ToString方法序列化类

C# 从ToString方法序列化类,c#,C#,我正在使用JSon.Net序列化ViewModel: public class ViewModel { public Int32 Id { get; set; } // other properties } public static class ViewModelExtensions { public static IHtmlString ToJson(this ViewModel model) { JsonSerializerSettings settings

我正在使用JSon.Net序列化ViewModel:

public class ViewModel {
   public Int32 Id { get; set; }
   // other properties
}

public static class ViewModelExtensions {

  public static IHtmlString ToJson(this ViewModel model) {

    JsonSerializerSettings settings = new JsonSerializerSettings {
      ContractResolver = new CamelCasePropertyNamesContractResolver()
    };

    return MvcHtmlString.Create(JsonConvert.SerializeObject(model, settings));

  } // ToJson

} // ViewModelExtensions
我可以在ViewModel类中添加一个方法ToString来序列化类本身,而不是使用扩展模型吗


我该怎么做?最好的选择是什么?

默认的ToString是一个虚拟函数,因此您只需执行以下操作即可覆盖它:

override public string ToString() {
    return [Your format logic here];
}

我想这就是你的目的。

根据我收到的评论,我刚刚结束了以下内容:

public class ViewModel {

  public IHtmlString ToJson() {
    return ToJson(new CamelCasePropertyNamesContractResolver());
  } // ToJson

  public IHtmlString ToJson(IContractResolver resolver) {
    JsonSerializerSettings settings = new JsonSerializerSettings {
      ContractResolver = resolver 
    };
    return MvcHtmlString.Create(JsonConvert.SerializeObject(this, settings));

  } // ToJson

} // ViewModel 

我强烈建议不要重写ToString(),因为框架在很多地方调用该方法;出于好奇,最好创建一个新方法,例如ToJsonString()。您知道框架将在哪些实例中执行此操作吗?在我看来很奇怪的是,他们会将其暴露在被覆盖的情况下,然后依赖于其不变的功能。并不是说我不相信你,我只是想看看他们为什么会这么做。框架并不“依赖”它不被改变,但它确实使用了它。。。基本上,只要它想“打印”一个对象,它就调用.ToString。这可能包括日志记录、异常消息、数据绑定等。您可能不希望对象的内部结构被用户看到。