C# 代码不作为扩展而以其他方式工作

C# 代码不作为扩展而以其他方式工作,c#,asp.net-mvc,json.net,C#,Asp.net Mvc,Json.net,在MVC视图中,我有以下内容: @(Newtonsoft.Json.JsonConvert.SerializeObject(Model)) @(Model.ConvertToJson()) public static class ObjectExtensions { public static String ConvertToJson<T>(this T obj) { return Newtonsoft.Json.JsonConvert.Serializ

在MVC视图中,我有以下内容:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
第一种方法适用于类和IPagedList

第二种方法适用于类,但不适用于模型为IPagedList的情况

ConvertToJSon扩展如下所示:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
我得到一个错误:

'PagedList<MyModel>' does not contain a definition for 'ConvertToJson'
现在它工作了。。。ConvertToJson是:

public static class ObjectExtensions {
  public static String ConvertToJson(this Object obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
有线索吗

更新2

这似乎很有效:

((Object)Model).ToJson())

奇怪,不是吗?

更新:

如果出现运行时异常,例如:

CS0012:类型“System.Object”是在未定义的程序集中定义的 参考。必须添加对程序集“System.Runtime”的引用, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'

您需要将主web.config的
编译
部分扩展到以下内容:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
此语法编译并运行时不会出错,输出:

["test1","test2"]
这也适用于
IPagedList

这个
在参数的类型声明之前告诉编译器它是一个扩展方法


更新:

如果出现运行时异常,例如:

CS0012:类型“System.Object”是在未定义的程序集中定义的 参考。必须添加对程序集“System.Runtime”的引用, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'

您需要将主web.config的
编译
部分扩展到以下内容:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
此语法编译并运行时不会出错,输出:

["test1","test2"]
这也适用于
IPagedList

这个
在参数的类型声明之前告诉编译器它是一个扩展方法


更新:

如果出现运行时异常,例如:

CS0012:类型“System.Object”是在未定义的程序集中定义的 参考。必须添加对程序集“System.Runtime”的引用, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'

您需要将主web.config的
编译
部分扩展到以下内容:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
此语法编译并运行时不会出错,输出:

["test1","test2"]
这也适用于
IPagedList

这个
在参数的类型声明之前告诉编译器它是一个扩展方法


更新:

如果出现运行时异常,例如:

CS0012:类型“System.Object”是在未定义的程序集中定义的 参考。必须添加对程序集“System.Runtime”的引用, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'

您需要将主web.config的
编译
部分扩展到以下内容:

@(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

@(Model.ConvertToJson())
public static class ObjectExtensions {
  public static String ConvertToJson<T>(this T obj) {       
    return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  }
}
<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>
此语法编译并运行时不会出错,输出:

["test1","test2"]
这也适用于
IPagedList

这个
在参数的类型声明之前告诉编译器它是一个扩展方法



如果将其更改为
String ConvertToJson(this Object obj)
那么它可以工作吗?你真的需要知道传入的T型吗?我不知道发生了什么。。。使用Object和T会导致相同的问题。我现在试着用Object。检查更新。。。有什么线索吗?如果你把它改成
字符串ConvertToJson(this Object obj)
它能工作吗?你真的需要知道传入的T型吗?我不知道发生了什么。。。使用Object和T会导致相同的问题。我现在试着用Object。检查更新。。。有什么线索吗?如果你把它改成
字符串ConvertToJson(this Object obj)
它能工作吗?你真的需要知道传入的T型吗?我不知道发生了什么。。。使用Object和T会导致相同的问题。我现在试着用Object。检查更新。。。有什么线索吗?如果你把它改成
字符串ConvertToJson(this Object obj)
它能工作吗?你真的需要知道传入的T型吗?我不知道发生了什么。。。使用Object和T会导致相同的问题。我现在试着用Object。检查更新。。。有什么线索吗?我想我发现了问题。我正在使用以下页面列表:它允许使用异步。当我使用这个扩展时,它似乎失败了。。。至少看起来是这样like@Miguel嗯,我不知道怎么可能。我添加了这个包并改为使用返回视图(新列表{newtest{Id=1,Name=“test1”},新测试{Id=2,Name=“test2”}}.ToPagedList(1,2));而且效果很好。我想说你仍然有一个问题需要清理和重建你的解决方案。我刚刚更新了我的代码。你知道什么地方可能出了问题吗?我真的不知道。这没有任何意义。@Miguel我回应了你最近的代码,因为你有另一个问题。如果这仍然不能解决问题,那么您粘贴的代码似乎不是给您带来麻烦的逐字逐句代码。我想我检测到了问题。我正在使用以下页面列表:它允许使用异步。当我使用这个扩展时,它似乎失败了。。。至少看起来是这样like@Miguel嗯,我不知道怎么可能。我添加了这个包并改为使用返回视图(新列表{newtest{Id=1,Name=“test1”},新测试{Id=2,Name=“test2”}}.ToPagedList(1,2));而且效果很好。我想说你仍然有一个问题需要清理和重建你的解决方案。我刚刚更新了我的代码。你知道什么地方可能出了问题吗?我真的不知道。这没有任何意义。@Miguel我回应了你最近的代码,因为你有另一个问题。如果这仍然不能解决问题,那么您粘贴的代码似乎不是给您带来麻烦的逐字逐句代码