相关疑难解决方法(0)

从lambda表达式中检索属性名称

通过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)

c# linq lambda expression-trees

489
推荐指数
14
解决办法
21万
查看次数

使用JSON.net,在基类上下文中使用时,如何防止派生类的序列化属性?

给定一个数据模型:

[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对象中的多态性.

c# serialization json.net

29
推荐指数
4
解决办法
2万
查看次数

如何从json序列化中排除特定类型

我正在将对WCF Web服务的所有请求(包括参数)记录到数据库中.这就是我这样做的方式:

  • 创建一个类WcfMethodEntry,它派生自PostSharp的方面OnMethodBoundaryAspect,
  • 使用WcfMethodEntry属性注释所有WCF方法,
  • 在WcfMethodEntry中,我使用JsonConvert.SerializeObject方法将方法参数序列化为json并将其保存到数据库中.

这工作正常,但有时参数非常大,例如一个自定义类,带有几个带有照片,指纹的字节数组等.我想从序列化中排除所有这些字节数组数据类型,这将是最好的方法做到了吗?

序列化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属性.

.net c# wcf postsharp json.net

5
推荐指数
1
解决办法
1596
查看次数

Json.NET - 如何在不访问类的情况下从序列化中排除属性

我试图使用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,只有其中一些属性.

我怎样才能做到这一点 ?

.net c# json json.net

4
推荐指数
1
解决办法
4913
查看次数

标签 统计

c# ×4

json.net ×3

.net ×2

expression-trees ×1

json ×1

lambda ×1

linq ×1

postsharp ×1

serialization ×1

wcf ×1