4

Web ApiControllers でプロパティが JSON にシリアル化されないようにしようとしています。次の 2 つのシナリオが機能することを確認しました。

除外したいプロパティに次の属性を含めました。

[System.Web.Script.Serialization.ScriptIgnore]
[System.Xml.Serialization.XmlIgnore]

JavaScriptSerializer を使用してオブジェクトを手動でシリアル化すると、プロパティが除外されます。また、Web ApiController からシリアル化された XML 出力を表示すると、プロパティが除外されます。問題は、Web ApiController を介してシリアル化された JSON にまだプロパティが含まれていることです。プロパティを JSON シリアル化から除外するために使用できる別の属性はありますか?

アップデート:

すべてのテストがはるかに複雑なプロジェクトで行われており、隔離された環境でこれを試したことがないことに気付きました。私はこれを行いましたが、まだ同じ結果が得られています。失敗しているコードの例を次に示します。

public class Person
{
    public string FirstName { get; set; }

    [System.Web.Script.Serialization.ScriptIgnore]
    [System.Xml.Serialization.XmlIgnore]
    public string LastName { get; set; }
}

public class PeopleController : ApiController
{
    public IEnumerable<Person> Get()
    {
        return new[]
                   {
                       new Person{FirstName = "John", LastName = "Doe"},
                       new Person{FirstName = "Jane", LastName = "Doe"}
                   };
    } 
}

生成された出力は次のとおりです。

JSON:

[
    {
        "FirstName" : "John",
        "LastName" : "Doe"
    },
    {
        "FirstName" : "Jane",
        "LastName" : "Doe"
    }
]

XML:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Person>
        <FirstName>John</FirstName>
    </Person>
    <Person>
        <FirstName>Jane</FirstName>
    </Person>
</ArrayOfPerson>
4

5 に答える 5

4

[JsonIgnore]JSON 固有の修正には属性を使用できます。または、JSON フォーマッタと (XML) の両方で機能する修正のために[DataContract]andを使用できます。[DataMember]DataContractSerializer

この記事では、デフォルトのメディア タイプ フォーマッタに関する詳細情報を提供します。

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_media_type_formatter

于 2013-11-10T06:01:50.257 に答える
4

Web API では JSON のシリアル化が変更されていることに注意してください。

ベータ リリースでは、Web API は DataContractJsonSerializer を使用して JSON をシリアル化しました。ただし、これは変更されました。Web APIの最新バージョンはデフォルトでjson.netを使用しますが、これをオーバーライドして代わりに DataContractJsonSerializer を使用できます。

DataContractJsonSerializer では、[DataContract] 属性を使用してシリアル化を制御できます。私はまだjson.netにあまり慣れていないので、シリアライゼーションをどのように制御するのかわかりません。

于 2012-05-07T03:12:42.107 に答える
4

これはゲームに少し遅れていIgnoreDataMemberますが、まさにあなた/私のシナリオで必要なものです:

[System.Runtime.Serialization.IgnoreDataMember]
public int NotSerialized { get; set; }

MSDN によると、IgnoreDataMember.NET 3.0 SP2 が付属しています。

于 2016-06-28T18:13:48.330 に答える
1

JsonIgnore は、クラス定義全体を変更します。特定のアクション/リクエストを制御したい場合は、このアプローチを試すことができます。

于 2013-10-17T20:39:27.853 に答える
0

これは私が必要とするものをカバーしているようです。フォーマッターを交換できることを示しています。私が必要としている JavaScriptSerializer を使用するフォーマッタの例も含まれています。

http://wildermuth.com/2012/2/22/WebAPI_for_the_MVC_Guy

于 2012-05-07T03:17:01.653 に答える