C#JSON匿名序列化

C#JSON匿名序列化,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我正在尝试为API调用序列化一些JSON: string f5Name = "MyBigIpName"; string poolName = "myPoolName"; string postJson2 = JsonConvert.SerializeObject( new { f5 = new { f5Name = new { poolName = memberState },

我正在尝试为API调用序列化一些JSON:

string f5Name = "MyBigIpName";
string poolName = "myPoolName";
string postJson2 = JsonConvert.SerializeObject(
    new
    {
        f5 = new {
            f5Name = new {
                poolName = memberState
            },
        }
    }
);
{
    "f5": {
        "f5Name": {
            "poolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}
{
    "f5": {
        "MyBigIpName": {
            "myPoolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}
这将产生以下JSON:

string f5Name = "MyBigIpName";
string poolName = "myPoolName";
string postJson2 = JsonConvert.SerializeObject(
    new
    {
        f5 = new {
            f5Name = new {
                poolName = memberState
            },
        }
    }
);
{
    "f5": {
        "f5Name": {
            "poolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}
{
    "f5": {
        "MyBigIpName": {
            "myPoolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}
然而,我真正想做的是生成这个JSON:

string f5Name = "MyBigIpName";
string poolName = "myPoolName";
string postJson2 = JsonConvert.SerializeObject(
    new
    {
        f5 = new {
            f5Name = new {
                poolName = memberState
            },
        }
    }
);
{
    "f5": {
        "f5Name": {
            "poolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}
{
    "f5": {
        "MyBigIpName": {
            "myPoolName": {
                "member": {
                    "address": "10.0.0.0",
                    "port": 80
                },
                "session_state": "STATE_DISABLED"
            }
        }
    }
}

有没有办法让f5Name和poolName属性名是动态的,这样我就可以生成上面的JSON?我正在使用Newtonsoft.JSON(JSON.NET)

我不确定您是否可以使用
动态
类型,但您肯定可以使用字典:

var obj = new
{
    f5 = new Dictionary<string, object>
    {
        {
            f5Name, new Dictionary<string, object> {
                {poolName, memberState}
            }
        }
    }
}
string postJson2 = JsonConvert.SerializeObject(obj);
var obj=new
{
f5=新字典
{
{
新字典{
{poolName,memberState}
}
}
}
}
字符串postJson2=JsonConvert.SerializeObject(obj);

对于您想要的内容,您需要在合同解析器中解析您的姓名。比如:

private class MyContractResolver : DefaultContractResolver
{
  private Dictionary<string,string> _translate;
  public MyContractResolver(Dictionary<string, string> translate)
  {
    _translate = translate;
  }
  protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
  {
    var property = base.CreateProperty(member, memberSerialization);
    string newPropertyName;
    if(_translate.TryGetValue(property.PropertyName, out newPropertyName))
      property.PropertyName = newPropertyName;
    return property;
  }
}
字典创建过程也可以很容易地自动化:-)