C# 如何在JSON.NET中禁用特殊属性或正确处理它们

C# 如何在JSON.NET中禁用特殊属性或正确处理它们,c#,javascript,json,serialization,json.net,C#,Javascript,Json,Serialization,Json.net,我将JSON.NET序列化程序与实体框架一起使用,并且遇到了这样一种情况,即输出的JSON包含了这些“特殊属性”,例如$id和$ref。据我所知,纯JSON使用这些属性来压缩输出的JSON,这样重复的元素就不必写两次 因此,输出的JSON如下所示: var myArray = [ { "ActiveStates": [ { "$id": "1", "StateID": "C

我将JSON.NET序列化程序与实体框架一起使用,并且遇到了这样一种情况,即输出的JSON包含了这些“特殊属性”,例如
$id
$ref
。据我所知,纯JSON使用这些属性来压缩输出的JSON,这样重复的元素就不必写两次

因此,输出的JSON如下所示:

 var myArray = [
     {
         "ActiveStates": [
             {
                 "$id": "1",
                 "StateID": "CA",
                 "Name": "California"
             },
             {
                 "$id": "2",
                 "StateID": "NV",
                 "Name": "Nevada"
             }
         ],
         "DefaultState": {
             "$ref": "1"
         }
     }
 ];
使用Javascript,如何使用DefaultState中的
$ref
和AvailableEstates中的
$id
返回加利福尼亚州的
名称

我正在考虑类似于
myArray.find(myArray.DefaultState.$ref.Name)的逻辑
它可能返回
California

希望这是像这样简单的事情

编辑:
我也认为学习如何将这些“特殊属性”禁用到数组中是一个可以接受的答案,即使这意味着JSON的输出会因重复元素而变长。

< P>我找到了解决问题的方法:

我正在使用下面定义的getObjects函数,如上面的页面链接所示

var myArray = [
    {
    "AvailableStates": [
        {
        "$id": "1",
        "CityID": "CA",
        "Name": "California"},
    {
        "$id": "2",
        "CityID": "NV",
        "Name": "Nevada"}
    ],
    "DefaultState": {
        "$ref": "1"
    }}
];

var stateName = getObjects(myArray, '$id', myArray[0].DefaultState.$ref)[0].Name;

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}​

我找到了解决问题的方法:

我正在使用下面定义的getObjects函数,如上面的页面链接所示

var myArray = [
    {
    "AvailableStates": [
        {
        "$id": "1",
        "CityID": "CA",
        "Name": "California"},
    {
        "$id": "2",
        "CityID": "NV",
        "Name": "Nevada"}
    ],
    "DefaultState": {
        "$ref": "1"
    }}
];

var stateName = getObjects(myArray, '$id', myArray[0].DefaultState.$ref)[0].Name;

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}​

我设法在配置中禁用了它(NewtonSerialiser)


我设法在配置中禁用了它(NewtonSerialiser)


在此处写了一篇较长的博文:在此处写了一篇较长的博文: