通过lambda表达式传入时,是否有更好的方法来获取属性名称?这是我现在拥有的.
例如.
GetSortingInfo<User>(u => u.UserId);
Run Code Online (Sandbox Code Playgroud)
只有当属性是字符串时,它才能将其作为元素表达式进行处理.因为不是所有属性都是字符串我必须使用对象,但它会返回一个单一表达式.
public static RouteValueDictionary GetInfo<T>(this HtmlHelper html,
Expression<Func<T, object>> action) where T : class
{
var expression = GetMemberInfo(action);
string name = expression.Member.Name;
return GetInfo(html, name);
}
private static MemberExpression GetMemberInfo(Expression method)
{
LambdaExpression lambda = method as LambdaExpression;
if (lambda == null)
throw new ArgumentNullException("method");
MemberExpression memberExpr = null;
if (lambda.Body.NodeType == ExpressionType.Convert)
{
memberExpr =
((UnaryExpression)lambda.Body).Operand as MemberExpression;
}
else if (lambda.Body.NodeType == ExpressionType.MemberAccess)
{
memberExpr = lambda.Body as MemberExpression;
}
if (memberExpr …Run Code Online (Sandbox Code Playgroud) 给定一个数据模型:
[DataContract]
public class Parent
{
[DataMember]
public IEnumerable<ChildId> Children { get; set; }
}
[DataContract]
public class ChildId
{
[DataMember]
public string Id { get; set; }
}
[DataContract]
public class ChildDetail : ChildId
{
[DataMember]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
出于实现方便的原因,有时候ChildId对象Parent实际上是ChildDetail对象.当我使用JSON.net来序列化时Parent,它们会被写出所有ChildDetail属性.
是否有任何方法可以指示JSON.net(或任何其他JSON序列化程序,我还没有足够的提交到项目中)在序列化为基类时忽略派生类属性?
编辑:重要的是,当我直接序列化派生类时,我能够生成所有属性.我只想抑制Parent对象中的多态性.
我正在将对WCF Web服务的所有请求(包括参数)记录到数据库中.这就是我这样做的方式:
这工作正常,但有时参数非常大,例如一个自定义类,带有几个带有照片,指纹的字节数组等.我想从序列化中排除所有这些字节数组数据类型,这将是最好的方法做到了吗?
序列化json的示例:
[
{
"SaveCommand":{
"Id":5,
"PersonalData":{
"GenderId":2,
"NationalityCode":"DEU",
"FirstName":"John",
"LastName":"Doe",
},
"BiometricAttachments":[
{
"BiometricAttachmentTypeId":1,
"Parameters":null,
"Content":"large Base64 encoded string"
}
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[
{
"SaveCommand":{
"Id":5,
"PersonalData":{
"GenderId":2,
"NationalityCode":"DEU",
"FirstName":"John",
"LastName":"Doe",
},
"BiometricAttachments":[
{
"BiometricAttachmentTypeId":1,
"Parameters":null,
"Content":"..."
}
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
编辑:我不能更改用作Web服务方法的参数的类 - 这也意味着我不能使用JsonIgnore属性.
我试图使用Json.NET序列化一个类.这就是我现在所做的.
public class AClass
{
// I don't have access to BClass
public BClass b;
}
AClass a = new AClass();
JsonConvert.SerializeObject(a);
Run Code Online (Sandbox Code Playgroud)
我无权访问BClass.我想序列化我的AClass但我不想序列化所有属性BClass,只有其中一些属性.
我怎样才能做到这一点 ?