C# 从ToString方法序列化类
我正在使用JSon.Net序列化ViewModel: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
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。这可能包括日志记录、异常消息、数据绑定等。您可能不希望对象的内部结构被用户看到。